表达式中的变量赋值

1 投票
4 回答
1438 浏览
提问于 2025-04-16 06:57

这是我用来生成小于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

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

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

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

撰写回答