python - 如何在 Python 生成器中向前看一个元素(peek)?

标签 python generator peek

我不知道如何在 Python 生成器中预测一个元素。我一看它就不见了。

我的意思是:

gen = iter([1,2,3])
next_value = gen.next()  # okay, I looked forward and see that next_value = 1
# but now:
list(gen)  # is [2, 3]  -- the first value is gone!

这是一个更真实的例子:

gen = element_generator()
if gen.next_value() == 'STOP':
  quit_application()
else:
  process(gen.next())

谁能帮我写一个可以向前看一个元素的生成器?


另请参阅: Resetting generator object in Python

最佳答案

为了完整起见,more-itertools package (它可能应该是任何 Python 程序员工具箱的一部分)包括一个实现此行为的 peekable 包装器。作为 the documentation 中的代码示例显示:

>>> p = peekable(['a', 'b'])
>>> p.peek()
'a'
>>> next(p)
'a'

但是,通常可以重写将使用此功能的代码,使其实际上并不需要它。例如,问题中的实际代码示例可以这样写:

gen = element_generator()
command = gen.next_value()
if command == 'STOP':
  quit_application()
else:
  process(command)

(读者注意:我在撰写本文时保留了问题示例中的语法,即使它指的是 Python 的过时版本)

关于python - 如何在 Python 生成器中向前看一个元素(peek)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58296519/

相关文章:

python - Audiosegment 对象和波形文件/数据之间的转换

python - 在python中通过modbus写入(更新值)到寄存器

python - (list|set|dict) 包含 yield 表达式的理解不返回 (list|set|dict)

python - 制作一个简单的 Python 字典生成器

ios - 窥视 iOS 9 应用程序崩溃

c - 有什么办法可以查看 stdin 缓冲区吗?

python - Python 中的 Bulls & Cows(策划者)。应该比较容易

python - 在 Django 1.8 中使用 MySQL 连接器时出现问题

JavaScript 生成器及其原型(prototype)链

sockets - 在 go 中不阅读而窥视 Conn