表达式中的变量赋值

这是我的代码,用于在低于10,000,000的fibonnacci序列中生成值。

3 fibs = [1,1] 4 while((x = fibs[-1] + fibs[-2]) <= 10000000): 5 fibs.append(x) 

我试图在while循环的条件下进行x样式的C赋值。 不幸的是,python告诉我这是一个语法错误。 什么是最简单的解决方案?

在Python中,赋值不是表达式,因此没有值。

最简单的解决方案是在循环的第一部分进行赋值:

 fibs=[1,1] while fibs[-1] <= 10000000: fibs.append(fibs[-1] + fibs[-2]) 

基本上:

 fibs = [1] x = 1 while(x <= 10000000): fibs.append(x) # It is not possible for "fibs" not to have # at least two elements by now x = fibs[-1] + fibs[-2] 

(实际上,它是Python的设计目标之一,以避免混合表达式和C语言的分配 - 这就是为什么没有x++x-- ,这也是一个半常见问题解答。)

不允许在Python表达式中赋值的原因是由此构造引起的其他语言中常见的,难以发现的错误。

请查看http://effbot.org/pyfaq/why-can-ti-use-an-assignment-in-an-expression.htm

 from functools import partial from itertools import imap, islice, takewhile import operator fibs = [1, 1] for x in takewhile(partial(operator.ge, 10000000), imap(operator.add, fibs, islice(fibs, 1, None))): fibs.append(x) 

哦等等,你说“最简单”? 没关系。