从入门到富豪 发表于 2020-5-6 11:53:06

装饰器函数问题

这个是我写的一个函数装饰器函数,用来计算代码执行时间的, 但是发现别人写的有def performacne_test函数里面再定义一个函数,这样做的意义何在,毕竟我这样也能实现了,求详细指导?
import time

def performance_test(testfc):
    start = time.perf_counter()
    testfc()
    end = time.perf_counter()
    print(f'本次测试函数用时:{end - start}秒')
@performance_test
def forlook():
    for i in range(50000000):
      pass

forlook

附录上别人的写法   
def my_decorator(func):
    def wrapper():               ##干嘛要在这里再去定义一个函数呢?
      start = time.perf_counter()
      func()
      end = time.perf_counter()
      print(f'函数运行时间{end - start}')
    return wrapper

def for_loop():
    for i in range(50000000):
      pass

liuzhengyuan 发表于 2020-5-6 11:58:46

这样可以让参数这样输入
my_decorator()()

从入门到富豪 发表于 2020-5-6 12:47:49

liuzhengyuan 发表于 2020-5-6 11:58
这样可以让参数这样输入

如果函数带参,能否详细一些说明呢谢谢,

_2_ 发表于 2020-5-6 12:59:46

从入门到富豪 发表于 2020-5-6 12:47
如果函数带参,能否详细一些说明呢谢谢,

再定义一个函数,是因为在调用装饰器的时候,会把函数作为一个参数传入其中进行计算

永恒的蓝色梦想 发表于 2020-5-6 13:07:50

你这根本不是装饰器,直接把函数执行了

rsj0315 发表于 2020-5-6 15:38:47

装饰器的本质是闭包,闭包是函数嵌套。你的貌似不算装饰器吧。
我也不知道说的对不对,欢迎指正
页: [1]
查看完整版本: 装饰器函数问题