gpt4 book ai didi

python - 为什么装饰器必须在调用之前声明,而函数却不需要?

转载 作者:行者123 更新时间:2023-11-28 21:09:30 25 4
gpt4 key购买 nike

我在 Python 2.7 中有以下示例:

import time
@timing
def my_test_function():
return 5+5
def timing(f):
def wrap(*args):
time1 = time.time()
ret = f(*args)
time2 = time.time()
print '%s function took %0.3f ms' % (f.func_name, (time2-time1)*1000.0)
return ret
return wrap

这失败了。NameError:未定义名称“时间”

然而,这并没有失败,显然:

def a():
result = b()
return result
def b():
return 'foo'

如果装饰器是函数,这里有什么区别?

最佳答案

函数确实必须在调用之前声明。唯一的区别是装饰器通常比其他函数更早被调用。

在您的示例中,装饰器在创建 my_test_function 时调用(可能是导入时间),而 b 直到 a 才被调用被称为。

如果您执行以下操作,您会看到一个 NameError 就像装饰器案例一样:

def a():
result = b()
return result

a() # Call `a` before `b` has been defined.

def b():
return 'foo'

关于python - 为什么装饰器必须在调用之前声明,而函数却不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com