gpt4 book ai didi

Python函数装饰器调用

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:32 26 4
gpt4 key购买 nike

我有一个函数被调用了大约 1742 次,但是当我做一个装饰器来计算它的每次调用时间时,我发现它只打印了 647 次,我不知道为什么会这样。

更新:

  • 我的问题不在于如何根据调用次数之间的差异进行计时,我想要一种方法来制作具有准确调用的装饰器之类的函数。

  • 我的 python 版本是 2.6,这是我正在处理的模块 http://pastebin.com/MXu1pLWM

  • 在分析输出中,我发现装饰函数的调用函数仅调用它 647,而且它是唯一的调用函数!!

想通了!

  • 我装饰的函数中有一个长度为 1742 的循环,但对该函数的实际调用只有 647,尽管我仍然不明白为什么它在调用部分说的是 1742 而不是 647 :)

number = 0
def timing(f):
def wrap(*args):
time1 = time.time()
ret = f(*args)
time2 = time.time()
global number
number+=1
print '%s function took %0.6f ms No of calls: %s' % (f.func_name, ((time2-time1)), str(number))
return ret
return wrap

最佳答案

我在 pastebin 上看到了您粘贴的代码。问题是您正在包装一个类的 __iter__ 方法。每个启动的循环只调用一次。它应该立即返回一个迭代器对象——可分析的是对 __iter__ 返回的对象的“next”方法的调用(这是在每个 for 循环交互)。

这意味着在不改变任何东西的情况下,您可以在 yield 周围以其他方式使用该代码,而不是将您的探查器用作调用 __iter__ 的装饰器taht __iter__

中的语句

除此之外,您最好使用 timeit.timeit 或其他已经存在的配置文件来避免此类陷阱,如评论中所列。

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

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