gpt4 book ai didi

python - 此代码中的 `return result` 是否会影响此装饰器的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:23 24 4
gpt4 key购买 nike

我今天看到一个关于decorators 的教程,但我想不通,下面代码中的return result 有什么意义。因为,它的存在和删除不会对代码的输出产生任何影响。

def timer_decorator(original_func):
def wrapper_func(*args, **kwargs):
import time
t1 = time.time()
time.sleep(2)
result = original_func(*args, **kwargs)
t2 = time.time()
res = t2 - t1
print('Ran {} in {} secs.'.format(original_func.__name__, res))
return result # here
return wrapper_func


@timer_decorator
def display_info(name, age, email):
print('Display info for {}, {} years old [{}]'.format(name, age, email))


display_info('Marry Doe', 25, 'marry_doe@gmail.com')

如果我删除 return result 或让它成为两种情况下的输出将是相同的。如果我遗漏了什么,请告诉我。谢谢

编辑:我编辑了 display_info 函数,这次它返回了一些东西:

@timer_decorator
def display_info(name, age, email):
return 'Display info for {}, {} years old [{}]'.format(name, age, email)

同样,如果我删除 return result 或让它在那里,这就是结果:

Ran display_info in 2.0001468658447266 secs.

没有变化

最佳答案

让我们用下面的例子来理解 -

  1. 装饰器内部函数返回一些东西:

import time
def calculate_time_decorator(func):
def wrapper(*args, **kwargs):
print('Before Time {}!'.format(time.time()))
ret = func(*args, **kwargs)
print('After Time {}!'.format(time.time()))
return ret
return wrapper

在这里,我们的 func()get_square(),它返回平方值。所以,我们期望在 ret

中返回这个平方值
@calculate_time_decorator
def get_square(n):
print("given number is:", n)
return n * n

  1. 不返回任何内容的装饰器内部函数:
import time
def calculate_time_decorator(func):
def wrapper(*args, **kwargs):
print('Before Time {}!'.format(time.time()))
func(*args, **kwargs)
print('After Time {}!'.format(time.time()))
return ret
return wrapper

在这里,我们的 func()myfunc(),它不返回任何值(因为它只是打印 不返回任何东西,只是打印!).因此,预计不会返回任何内容,因此我们没有在 func(*args, **kwargs)

中捕获任何返回值
@calculate_time_decorator
def myfunc():
print('Not returning anything just printing!')

来源:

https://www.learnpython.org/en/Decorators

https://hackernoon.com/decorators-in-python-8fd0dce93c08

关于python - 此代码中的 `return result` 是否会影响此装饰器的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57122612/

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