表达式中的变量赋值
这是我用来生成小于10,000,000的斐波那契数列的代码。
3 fibs = [1,1]
4 while((x = fibs[-1] + fibs[-2]) <= 10000000):
5 fibs.append(x)
我在while循环的条件里尝试用C语言那种方式给x赋值,但不幸的是,Python告诉我这是个语法错误。有没有什么简单的解决办法?
4 个回答
2
在Python中,不允许在表达式里进行赋值,这是为了避免在其他编程语言中常见的一种难以发现的错误,这种错误就是由于这种写法造成的。
请查看这个链接了解更多信息: http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
3
简单来说:
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--
这样的写法,这也是一个常见的问题。)
9
最简单的解决办法是在循环的第一部分进行赋值:
fibs=[1,1]
while fibs[-1] <= 10000000:
fibs.append(fibs[-1] + fibs[-2])