Python 装饰器在 load/import 上执行
Python Decorator executed on load/import
我正在努力思考 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()
将输出:
underscore
call func1
wrapped
func1
call func2
func2
为什么我在这个例子中第一个是 underscore
?
谢谢
因为 func_decorate2('p')
立即执行并且 returns 一个装饰器,当解释器使用它装饰 myfunc2
.
时,装饰器本身会立即执行
需要注意的是 @
后面的部分只是一个表达式。它本身不必是一个函数——它只需要求值为 1,并且求值会在定义时立即发生。
因为func_decorate2错了。如果你想在你的装饰器中使用参数,你必须再添加一个 def level
def func_decorate2(tag_name):
def _(f):
def _fun():
print('underscore')
return f
return _fun
return _
我正在努力思考 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()
将输出:
underscore
call func1
wrapped
func1
call func2
func2
为什么我在这个例子中第一个是 underscore
?
谢谢
因为 func_decorate2('p')
立即执行并且 returns 一个装饰器,当解释器使用它装饰 myfunc2
.
需要注意的是 @
后面的部分只是一个表达式。它本身不必是一个函数——它只需要求值为 1,并且求值会在定义时立即发生。
因为func_decorate2错了。如果你想在你的装饰器中使用参数,你必须再添加一个 def level
def func_decorate2(tag_name):
def _(f):
def _fun():
print('underscore')
return f
return _fun
return _