Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python a,b=b,a+;B_Python - Fatal编程技术网

Python a,b=b,a+;B

Python a,b=b,a+;B,python,Python,这是我的第一个问题,我开始学习Python。 以下两者之间是否有区别: a, b = b, a + b 及 当您在下面的示例中编写它时,它会显示不同的结果 def fib(n): a, b = 0, 1 while a < n: print(a, end=' ') a, b = b, a + b print() fib(1000) def fib(n): a、 b=0,1 而a

这是我的第一个问题,我开始学习Python。 以下两者之间是否有区别:

a, b = b, a + b

当您在下面的示例中编写它时,它会显示不同的结果

def fib(n):
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a + b
    print()
fib(1000)
def fib(n):
a、 b=0,1
而a

def fib(n):
a、 b=0,1
而a
行:

a, b = b, a + b
更接近:

temp_a = a
a = b
b = temp_a + b
其中,
b
使用
a
的旧值,然后将
a
重新分配给
b
的值

Python首先计算右侧表达式并将结果存储在堆栈上,然后获取这两个值并将它们分配给
a
b
。这意味着
a+b
是在
a
更改之前计算的


请参阅,了解字节码级别上所有表达式的工作原理。

a,b=b,a+b
中,在将右侧的表达式分配到左侧之前,将对其进行求值。因此,它相当于:

c = a + b
a = b
b = c
old_a = a
old_b = b
c = old_a + old_b
a = old_b
b = c

在第二个示例中,
a
的值在运行
b=a+b
时已经改变。因此,结果是不同的。

假设我们从
a
b
开始,如下所示:

a = 2
b = 3
因此,当您这样做时:

a, b = b, a + b
所发生的事情是创建元组
(b,a+b)
(3,5)
,然后将其解压缩到
a
b
中,这样
a
变成
3
b
变成
5

在第二个示例中:

a = b
# a is now 3
b = a + b
# b is 3 + 3, or 6.

我希望您没有受到C语言的影响,它的赋值运算符
=
的优先级高于逗号运算符
。不要认为这是
(a),(b=b),(a+b)
。这是一个元组赋值,意味着它是
(a,b)=(b,a+b)
a,b=b,a+b
类似于
a,b=0,1
同时为两个变量
a,b
赋值。首先分配
a=b
,然后分配
b=a+b

让我们摸索一下


a,b=b,a+b

这是一个元组赋值,意思是
(a,b)=(b,a+b)
,就像
(a,b)=(b,a)

从一个简单的例子开始:

a, b = 0, 1
#equivalent to
(a, b) = (0, 1)
#implement as
a = 0
b = 1
当涉及到
(a,b)=(b,a+b)

EAFP,直接试一试

a, b = 0, 1
a = b #a=b=1
b = a + b #b=1+1
#output
In [87]: a
Out[87]: 1
In [88]: b
Out[88]: 2
但是,

In [93]: a, b = b, a+b
In [94]: a
Out[94]: 3
In [95]: b
Out[95]: 5
结果与第一次尝试不同

这是因为Python首先计算右边的
a+b

因此,它相当于:

c = a + b
a = b
b = c
old_a = a
old_b = b
c = old_a + old_b
a = old_b
b = c
总之,
a,b=b,a+b意味着,
a
交换以获取
b
的旧值,

b
交换以获取旧值
a
和旧值
b

a、b=b、a+b和a=b=a+b之间存在差异
让我们看一下以下两个示例:

eg1:

a,b=0,1
一会儿
a,b = 0,1
while a<10:
  print(a)
  a,b = b,a+b

#output:
0
1
1
2
3
5
8
a,b = 0,1
while a<10:
  print(a)
  a=b
  b=a+b
#output:
0
1
2
4
8