Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 按需获取方法生成的值_Python 3.x - Fatal编程技术网

Python 3.x 按需获取方法生成的值

Python 3.x 按需获取方法生成的值,python-3.x,Python 3.x,我使用的API与此类似: class API: def start(self): self._calculate(100) def _calculate(self, n): # do some calculation for i in range(n): self.on_value_calculated(i**2) def on_value_calculated(self, x):

我使用的API与此类似:

class API:
    def start(self):
        self._calculate(100)

    def _calculate(self, n):
        # do some calculation
        for i in range(n):
            self.on_value_calculated(i**2)

    def on_value_calculated(self, x):
        raise NotImplementedError
start
是一种公共方法,
on\u value\u computed
是一种抽象方法,
calculate
是一种受保护的方法。为了获得API计算的值,我应该创建一个新类,继承自
API
,并覆盖
上的
,因此:

class MyAPI(API):
    def on_value_calculated(self, x):
        print(x)
我的问题是:在上面的代码中,当我运行
start
方法时,所有100次迭代都会一次接一次地调用。如何按需获取计算值,如下面的伪代码

api = MyAPI()
api.start()

def get_next():
    item = next(api)
    label.set_text(item.text)
    print('Another item generated!')

button.set_command(get_next)
我想在
start
中使用
yield from
,在
中使用
yield
对计算出的值进行计算

def get_next():
    item = yield from api.start()
    label.set_text(item.text)

class MyAPI(API):
    def on_value_calculated(self, x):
        yield x
但是它引发了
NoneType不是一个iterable

我可以实现
\uuuuuuuuuuuuuuuuuuuuuuuuu
方法,但我认为没有办法将计算出的值发送到
\uuuuuuuuuuuuuuuuuuuuuu
返回值。我希望按需运行的原因是,计算出的值使用了一些内存,而拥有这些值的列表可能会使程序速度变慢

谢谢你的帮助