python学习笔记:装饰器2

本文介绍了Python装饰器的基本概念及其使用方法。首先通过一个简单的例子展示了装饰器如何在不修改原始函数的基础上添加新的功能。接着进一步讲解了如何创建带有参数的装饰器,并提供了具体的实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python的装饰器本质是函数,为了不改变装饰目标函数内部代码而增加额外功能而存在

一.一般装饰函数实例:

import datetime
def func_name(func):#定义一个装饰函数,接受一个函数对象作为参数(也就是被装饰的函数)
    def wrap():#包装函数
        print("Function name:%s"%(func.__name__))
        func() #执行目标函数
    return wrap  #返回包装函数
@func_name      #等于 func_time = func_name(func_time)
def func_time():   #目标函数
    print(datetime.datetime.now())
func_time()
#执行结果:
Function name:func_time
2017-09-22 17:25:30.622356
二.带参数的装饰函数
装饰器本身可以带参数,我们来给装饰器增加一个是否要输出函数名的参数is_show,不用管那函数有多少个参数。使用Python的可变参数 *args 和关键字参数 **kwargs 即可
import datetime
def func_name(is_show=True):#定义一个带有参数的装饰函数
    def wrap(func):#包装函数,接受一个函数对象作为参数
        def inner_wrap(*args,**kwargs):
            if is_show:
                print("Function name:%s"%(func.__name__))
            return func(*args,**kwargs)
        return inner_wrap 
    return wrap
@func_name(True)      #显示函数名
def func_time1():  
    print(datetime.datetime.now())
@func_name(False)     #不显示函数名
def func_time2():
    print(datetime.datetime.now())
func_time1()
func_time2()
#执行结果:
Function name:func_time1
2017-09-22 18:41:49.695787
2017-09-22 18:41:49.696288

总结

1.定义一个装饰器函数,此函数会接受函数对象作为输入参数,以确保能执行其功能
2.在装饰器函数内定义一个和目标函数参数列表一致的包装函数,返回值(包装函数),同时添加欲追加的工作量(甚至彻底替换掉目标函数)
3.装饰器函数返回值设置为包装函数
4.把目标函数对象传递给装饰器函数去执行,返回值(包装函数)赋值到目标函数名上,最后以目标函数之名调用包装函数

 

转载于:https://www.cnblogs.com/wenwei-blog/p/7576138.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值