表达式中的变量赋值

时间:2010-11-12 04:20:50

标签: python c

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

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

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

4 个答案:

答案 0 :(得分:9)

In Python, assignment is not an expression, and therefore has no value.

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

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

答案 1 :(得分: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--,这也是一个半常见问题解答。 )

答案 2 :(得分:2)

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

请检查 http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm

答案 3 :(得分:1)

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)
等等,你说“最简单”?没关系。