job*_*bou 5 python python-decorators
我试图把头缠在python的装饰器上。但是有些我不明白。这是我的代码,我的问题与func_decorate2(带参数的装饰器)有关。
def func_decorate(f):
def wrapper():
print('wrapped');
f()
return wrapper
@func_decorate
def myfunc1():
print('func1')
def func_decorate2(tag_name):
def _(f):
print('underscore')
return f
return _
@func_decorate2('p')
def myfunc2():
print('func2')
print('call func1')
myfunc1()
print('call func2')
myfunc2()
Run Code Online (Sandbox Code Playgroud)
将输出:
underscore
call func1
wrapped
func1
call func2
func2
Run Code Online (Sandbox Code Playgroud)
为什么underscore在这个示例中我首先拥有?
谢谢
因为func_decorate2('p')立即执行并返回一个装饰器,当解释器使用它来装饰时,该装饰器本身会立即执行myfunc2。
实现的技巧是后面的部分@只是一个表达式。它本身不必是一个函数 \xe2\x80\x93 它只需要计算为 1 并且计算在定义时立即发生。
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |