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