返回用于时序分析的 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 生成器的主要内容,如果未能解决你的问题,请参考以下文章

时序分析 29 - 时序预测 - 格兰杰因果关系(下) python实践2

ALTERA系列FPGA时序分析

用python对股票期货做时序分析

2020 时序分析(19) AR 模型

第五章: 延迟计算 上静态时序分析圣经翻译计划

FPGA时序约束