我正在尝试在 python 中围绕 generator 和 yield 进行思考。我知 Prop 有 yield 的函数会返回一个生成器对象。但是,如果我尝试将该生成器对象转换为列表,它会挂起我的机器。我想弄清楚为什么会这样。将生成器对象转换为列表的更优雅的方法是什么。
def fib():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
a = fib()
print(type(a))
b = fib()
print(type(b))
print(list(b))
输出
<class 'generator'>
<class 'generator'>
请您参考如下方法:
问题是你的生成器没有结束条件(while True 并且没有 break)
即使编写这样的生成器是有意义的(例如:生成 Pi 的所有小数或我刚刚在您的代码中识别出的斐波那契数列 :)),当您将其转换为列表,它永远循环(并且也吃掉所有内存)
顺便说一句:list() 当然是将(有限 :))生成器转换为 list 对象的最佳方式。
