表达式中的变量赋值
这是我的代码,用于在低于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)
哦等等,你说“最简单”? 没关系。