装饰器
装饰器是高阶函数,接受函数作为参数并返回函数
def add_apples(func):
def get_fruits():
fruits = func()
fruits.append('小米')
return fruits
return get_fruits
@add_apples #引用装饰器
def get_fruits():
return ['华为', '中兴', 'vivo']
print (','.join(get_fruits()))
--> 结果:华为,中兴,vivo,小米
让 @add_apples(被引用的函数)自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用(详情见:https://www.imooc.com/code/6065)
from functools import wraps
def beg(target_function):
@wraps(target_function)
def wrapper(*args, **kwargs):
msg, say_please = target_function(*args, **kwargs)
if say_please:
return "{} {}".format(msg, "什么?")
return msg
return wrapper
@beg
def say(say_please=False):
msg = "what?"
return msg, say_please
print (say())
-->输出结果: what?
print (say(say_please=True))
-->输出结果:what?什么?