Rad*_*nik 4 python theory decorator
我对Python中的干净thory有疑问.什么时候:
@decorator_func
def func(bla, alba):
pass
Run Code Online (Sandbox Code Playgroud)
相当于:
def func(bla, alba):
pass
func = decorator_func(func)
Run Code Online (Sandbox Code Playgroud)
所以:
@decorator_func(aaa, bar)
def func(bla, alba):
pass
Run Code Online (Sandbox Code Playgroud)
等于...?
它相当于:
def func(bla, alba):
pass
func = decorator_func(aaa, bar)(func)
Run Code Online (Sandbox Code Playgroud)
要么:
def func(bla, alba):
pass
decorator = decorator_func(aaa, bar)
func = decorator(func)
Run Code Online (Sandbox Code Playgroud)
所以在你的第二个例子中,decorator_func应该是一个返回可调用的callable.
这是一个这样的结构的例子:
class prepend_two_arguments:
def __init__(self, a, b):
self.a = a
self.b = b
def __call__(self, f):
def wrapped_function(*args, **kwargs):
return f(self.a, self.b, *args, **kwargs)
return wrapped_function
@prepend_two_arguments(1,2)
def f(a, b, c):
return a+b+c
print(f(3)) # 6
Run Code Online (Sandbox Code Playgroud)
另一个,只使用功能:
def add_to_result(x):
def decorator(fn):
def wrapped_function(*args, **kwargs):
return fn(*args, **kwargs)+x
return wrapped_function
return decorator
@add_to_result(3)
def my_func(a, b):
return a+b
print(my_func(1,2)) # 6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |