📅  最后修改于: 2020-04-06 08:45:36             🧑  作者: Mango
先决条件: Python中的装饰器
Python函数是First Class成员,这意味着可以像对待对象一样对待函数。
带参数的装饰器与普通装饰器类似。
带参数的装饰器的语法:
@decorator(params)
def func_name():
''' 函数内容'''
上面的代码等效于:
def func_name():
''' 函数内容'''
func_name = (decorator(params))(func_name)
"""
当执行从左到右开始时,将调用decorator(params),它返回一个功能对象fun_obj。使用fun_obj调用fun_obj(fun_name)。在函数内部,执行所需的操作并返回实际的函数引用,该引用将分配给func_name。现在,可以使用func_name()调用应用了装饰器的函数。
带参数的装饰器如何实现
def decorators(*args, **kwargs):
def inner(func):
'''
内部操作
'''
return func
return inner #this is the fun_obj mentioned in the above content
@decorators(params)
def func():
"""
函数实现
"""
在这里,参数也可以为空。
例:
# Python展示带有参数的修饰器
def decorator(*args, **kwargs):
print("在修饰器内")
def inner(func):
print("内部函数")
print("我喜欢", kwargs['like'])
return func
return inner
@decorator(like = "芒果文档")
def func():
print("在实际函数中")
func()
输出:
在修饰器内
内部函数
我喜欢 芒果文档
在实际函数中
该示例还告诉我们,外部函数参数可以通过随附的内部函数进行访问。
1.室内装饰器
2.函数内部