gpt4 book ai didi

Python装饰器函数执行

转载 作者:太空狗 更新时间:2023-10-30 00:54:38 25 4
gpt4 key购买 nike

我有以下装饰器演示代码。如果我在没有显式调用 greet 函数的情况下执行它,它会在 decorator 函数内执行 print 语句并输出 Inside decorator

我无法理解装饰器的这种行为。即使我没有调用 greet 函数,如何调用 time_decorator

我正在使用 Python 3。

def time_decorator(original_func):
print('Inside decorator')
def wrapper(*args, **kwargs):
start = time.clock()
result = original_func(*args, **kwargs)
end = time.clock()
print('{0} is executed in {1}'.format(original_func.__name__, end-start))
return result
return wrapper


@time_decorator
def greet(name):
return 'Hello {0}'.format(name)

最佳答案

装饰器在开始时调用(当python解释器在程序启动时读取代码),而不是在运行时 (实际调用装饰函数时)

在运行时,被包装的函数 wrapper 被调用,它本身调用装饰函数并返回其结果。

所以 print 行被执行是完全正常的。

如果,也就是说,你装饰了 10 个函数,你将看到 10 倍的打印输出。甚至不需要为此调用装饰函数。

print 移到 wrapper 中,这样就不会再发生了。

Decorators 以及 metaclasses 是所谓的元编程 (修改/创建代码,从现有代码)。这是编程的一个真正迷人的方面,它需要时间来理解,但提供了惊人的可能性。

关于Python装饰器函数执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435236/

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