yield的错误 - “function”对象不可订阅

时间:2013-10-02 14:54:53

标签: python python-2.7

我正在尝试编写加热器功能,但我遇到了一些困难。我是Python的新手。

我希望我的加热器运行15000秒,但前120秒(包括120秒)。我希望它遵循线性路径Temperatures = 0.0804 * time + 16.081然后在120秒后我希望它在线性方程中找到的最终温度的剩余时间内保持不变。我需要分别计算每个给定时间的温度。作为有限元代码,我将我的代码放在每个时间步的调用python中,只需要该时间步的信息。

我写的代码在下面,我收到的错误是'function'对象不是可订阅的

    import math, numpy as np
from random import *

a = 0.0804

def temperatures():
    for second in xrange(121):
            last = a * second + 18.3
        yield last

mygenerator = temperatures() #create a generator
print(mygenerator)
for last in mygenerator:
    temperatures += temperatures[120:] * (15000 - 120)
    print temperatures

我知道错误与第14行有关。我想我不能调用temperatures[120:],因为它不是列表或字典?我不确定在python中编写我需要的东西的最佳方法是什么。我需要分别计算每个给定时间的温度。作为有限元代码,我将我的代码放在每个时间步的调用python中,只需要该时间步的信息。

非常感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

这里有几个问题。

首先,你的迭代器只运行120个循环,然后它将结束,这不是你上面所描述的。接下来,您没有引用生成器的输出。如果你想要输出,你应该参考last。

下面是一个非常简化的生成器,它执行类似于您正在执行的操作。它运行10个周期,但在第5个周期后表现不同。

>>> def Temp():
...     for i in xrange(10):
...             if i<5:
...                     yield i;
...             else:
...                     yield 5
... 
>>> for last in Temp():
...     print last