什么是 idiomatic从函数创建无限迭代器的方法?例如
from itertools import islice
import random
rand_characters = to_iterator( random.randint(0,256) )
print ' '.join( islice( rand_characters, 100))
会产生100个随机数
最佳答案
您想要一个不断产生值直到您停止请求新值的迭代器吗?简单地使用
it = iter(function, sentinel)
它为每个迭代步骤调用 function()
,直到结果 == sentinel
。
因此,在您的情况下,选择一个您想要的函数永远不会返回的哨兵,例如 None
。
rand_iter = lambda start, end: iter(random.randint(start, end), None)
rand_bytes = rand_iter(0, 256)
如果你想监控机器上的某些状态,你可以这样做
iter_mystate = iter(getstate, None)
依次为每个迭代步骤无限调用 getstate()
。
但要注意返回 None
作为有效值的函数!在这种情况下,您应该选择一个保证唯一的哨兵,也许是为这个工作创建的对象:
iter_mystate = iter(getstate, object())
关于python:来自函数的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646918/