我不知道如何在 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())
谁能帮我写一个可以向前看一个元素的生成器?
最佳答案
为了完整起见,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/