包含 while 循环及其语句的生成器表达式

问题描述 投票:0回答:2

是否可以编写一个包含 while 循环及其语句的生成器表达式?如果有的话,模板怎么样? 例如考虑斐波那契数列的生成器:

def fibogen(m):
    n1 = 0
    n2 = 1
    while n1<=m:
        yield n1
        n1,n2 = n2, n2 + n1
fibseq = fibogen(30)

是否可以将其写为生成器表达式?如果答案是肯定的,那么如何写呢?我尝试过,但做不到:

fiboseq = (n1 while n1<=m n1,n2 = n2, n2 + n1)

python while-loop expression generator
2个回答
0
投票

你可以用一些技巧来做到这一点:

fibonacci = lambda m: (x1 := 0) or (x2 := 1) and ((next_x := x1 + x2) and (x1 := x2) + (x2 := next_x) for _ in range(m))

for num in fibonacci(30):
    print(num)

但是你为什么要这么做呢?它看起来非常丑陋:)


0
投票

我确信你不允许在列表理解中使用

while
,所以我想泛型表达式也是如此

© www.soinside.com 2019 - 2024. All rights reserved.