【问题标题】:Python generator function confusionPython生成器函数混淆
【发布时间】:2014-11-14 22:39:20
【问题描述】:

嘿,所以我正在开发一个需要昼夜循环的程序。这是我让它开始工作的函数:

def epoch():
    for i in range(0,varb.run_number):
        print("it is now day")
        epoch_state = 1
        yield epoch_state
        time.sleep(varb.day_night_length)
        print("it is now night")
        epoch_state = 0 
        yield epoch_state
        time.sleep(varb.day_night_length)

我找不到任何问题,但是当我调用它时,我得到了这个:

<generator object epoch at 0x01036670>

关于如何解决这个问题的任何想法?

附:这里的想法是在打印出状态并返回状态的同时运行循环

附言任何带有 varb 的东西。是一个具有不重要数值的全局变量

【问题讨论】:

  • 这不是错误。你创建了一个生成器函数...
  • 好的,我怎样才能改变我的代码来做我需要的事情?
  • 好的,我刚刚做了 list(epoch()) 并且它有效。如果我需要再次做同样的事情,我做了什么?如何重新创建?
  • @unknown: list() 接受一个迭代器(生成器是一种特殊的迭代器)并接受所有产生的元素。
  • 当你想要它时调用 list(epoch)

标签: python function generator


【解决方案1】:

这里没有错误。该功能工作正常。

您使用yield 表达式创建了一个生成器函数。您现在需要遍历您的生成器。在您这样做之前,生成器会暂停。

您可以为此使用list()

result = list(epoch())

for 循环:

for result in epoch():
    print(result)

【讨论】:

  • result = list(epoch()) 会运行函数中的循环吗?
猜你喜欢
  • 2015-12-17
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多