python:来自函数的迭代器

标签 python

什么是 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/

相关文章:

内存中的python OpenCV jpeg压缩

python - 解析命令调用的输出

python - 将 read_excel 与转换器一起使用以将 Excel 文件读入 Pandas DataFrame 会导致对象类型的数字列

python - 在Ocaml写的程序中调用python写的程序

python - 似乎无法让我的 'while True' 循环继续循环

python - 如何计算vtk文件的体积

python3.5 import tensorflow.contrib error : Function has keyword-only arguments or annotations, 使用可以支持它们的getfullargspec() API

Python广度优先搜索矩阵打印路径

python - 谷歌抓取 href 值

具有两个范围的python dict理解