在加载/导入时执行Python Decorator

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在这个示例中我首先拥有?

谢谢

Dav*_*ess 4

因为func_decorate2('p')立即执行并返回一个装饰器,当解释器使用它来装饰时,该装饰器本身会立即执行myfunc2

\n\n

实现的技巧是后面的部分@只是一个表达式。它本身不必是一个函数 \xe2\x80\x93 它只需要计算为 1 并且计算在定义时立即发生。

\n