返回用于时序分析的 python 生成器
Posted
技术标签:
【中文标题】返回用于时序分析的 python 生成器【英文标题】:Returning a python generator for timing analysis 【发布时间】:2016-12-06 18:03:10 【问题描述】:我写了一个 sn-p,它使用生成器返回自上次调用以来经过的时间。
def time_gen(start_time):
start = start_time
while True:
elapsed = time.time() - start
start = time.time()
yield elapsed
def test():
a = time_gen(time.time())
for i in range(4):
time.sleep(1)
print(a.next()) #prints about 1 second
它似乎运作良好。但我不喜欢用户需要如何在开始时间传递。有没有办法编写一个函数来返回一个已经作为参数传递的开始时间的生成器?
#Broken Code
def time_closure():
def time_gen(start_time):
start = start_time
while True:
elapsed = time.time() - start
start = time.time()
yield elapsed
a = time_gen(time.time())
return a
#Usage of Broken Code
a = time_closure()
a.next()
【问题讨论】:
为什么说你的第二个代码sn-p坏了? 哦,你是对的。它确实有效。我的repl有问题。当我将它粘贴到 ipython 时,它抱怨返回。我以为这是因为我不懂生成器,但它实际上只是一个空格错误。对于任何有同样问题的人,请使用 ipython 中的 %paste 宏。 【参考方案1】:您不必将启动时间传递给生成器。你可以在第一行做start = time.time()
,其余的保持原样
【讨论】:
这会导致start
在第一次调用 next
时计算,而不是在创建生成器时计算。以上是关于返回用于时序分析的 python 生成器的主要内容,如果未能解决你的问题,请参考以下文章