我正在看here中的一个例子,特别是下面的例子:
import random
PLUGINS = dict()
def register(func):
"""Register a function as a plug-in"""
PLUGINS[func.__name__] = func
return func
@register
def say_hello(name):
return f"Hello {name}"
@register
def be_awesome(name):
return f"Yo {name}, together we are the awesomest!"
def randomly_greet(name):
greeter, greeter_func = random.choice(list(PLUGINS.items()))
print(f"Using {greeter!r}")
return greeter_func(name)
让我感到困惑的是say_hello()
和be_awesome()
函数直到最后一行才被调用,但是PLUGINS
已经包含了这两个函数。我习惯于认为装饰器是应用的,而函数是显式调用的,但是这个例子告诉我我错了。发生这种情况是因为register
函数不调用func
吗?但是如果它真的打电话呢?这是一个需要记住的特殊情况,还是背后有某种制度
相当于:
相关问题 更多 >
编程相关推荐