Skip to main content
 首页 » 编程设计

python之将生成器对象转换为列表

2025年05月04日12exmyth

我正在尝试在 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 对象的最佳方式。