说我有这个Python代码
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
对于n=1000
,这会打印:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
但我不明白为什么它是1 1 2 3
。
问题在于这一行:
a, b = b, a+b
执行的顺序是什么? 我看到的两个选项是:
1 :
a = b
b = a+b
2 :
b = a+b
a = b
但是当我手动尝试时,它们都没有给我正确的结果。 我错过了什么?
答案 0 :(得分:2)
您分享的两个选项中没有一个实际描述了以下方面的工作:
var arrayObjects = ['James', 'CEO', '$13000', 'London'];
// or
var arrayObjects = {
"name": "James",
"position": "CEO",
"salary": "$13,140",
"office": "London"
};
// it will work now
myDataTable.clear().row.add(arrayObjects).draw();
以上代码为a, b = b, a+b
分配a
的值。并且b
的旧值为b
(即在a+b
中a+b
的旧值)。您可以将其视为等同于:
a
示例:一行中的双变量赋值:
>>> temp_a, temp_b = a, b
>>> a = temp_b
>>> b = temp_a + temp_b
等效显式逻辑:
>>> a, b = 3, 5
>>> a, b = b, a+b
>>> a
5
>>> b
8
答案 1 :(得分:2)
a, b = b, a+b
中的操作顺序是构造元组(b, a+b)
,然后将该元组分配给变量(a, b)
。换句话说,分配的右侧在左侧之前完全被评估。
(实际上,从Python 2.6开始,在这样的情况下实际上没有构造元组,最多有3个变量 - 更有效的字节码操作系列被替换。但是,根据设计,这不是具有任何可观察性的变化的差异。)
答案 2 :(得分:0)
交换两个变量的python标准方法,这是一个清除疑点的工作示例,
Python从左到右评估表达式。请注意,虽然 评估一项任务,在评估之前对右侧进行评估 左手边。
http://docs.python.org/3/reference/expressions.html#evaluation-order
a=[1,2,3,4,5]
for i,j in enumerate(a):
if i==1:
a[i-1],a[i]=a[i],a[i-1]
print(a)
输出:
[1, 2, 3, 4, 5]
有关详细信息,请read this tutorial