无参装饰器与有参装饰器

1.  装饰器

装饰器本质上就是一个高阶函数,通过接受一个函数作为参数,然后将内部函数返回。

# -*- coding: utf-8 -*-  
# 装饰器监测函数的调用和性能  
  
def print_log(f):  
    """ 装饰器函数: 监测函数的调用 """  
    def fun(x):  
        print(f.__name__ + " is called.")  
          
        # 可以不返回, 直接在此处执行f(x)  
        return f(x)  
    return fun  
     
@print_log  
def sort_fun(num_list):  
    """ 排序函数 """  
    return sorted(num_list)  
  
  
if __name__ == "__main__":  
    num_list = sort_fun(list(range(100))*100)  

2. 无参装饰器

装饰器本身就是为了多个函数而设计,比如检测函数的运行时间,打印函数的日志等等。用1中的程序来说,你很难保证每个被装饰的函数的形参个数相等。无参装饰器可以很好地解决这个问题,因此无参装饰器被广泛使用。

# -*- coding: utf-8 -*-  
  
def print_log(f):  
    """ 装饰器函数: 监测函数的调用 """  
    def fun(*args, **kwargs):  
        print(f.__name__ + " is called.")  
        return f(*args, **kwargs)
    return fun  
     
@print_log  
def sort_fun(num_list):  
    """ 排序函数 """  
    return sorted(num_list)  
  
  
if __name__ == "__main__":  
    num_list = sort_fun(list(range(100))*100)  


3. 有参装饰器

有参装饰器就是一个更高阶的函数,可以通过@print_log(parameters)在调用的时候添加参数,因此有参装饰器是一个3阶的函数。
ython

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值