B engi:Pythona b=b a+ b

这是我的第一个问题,我开始学习 Python。

a, b = b, a + b

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
    while a < n:
        print(a, end=' ')
        a = b
        b = a + b
    print()
fib(1000)
46

a, b = b, a + b中,右侧的表达式在被分配到左侧之前被评估。

c = a + b
a = b
b = c

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

20

The line:

a, b = b, a + b

更接近:

temp_a = a
a = b
b = temp_a + b

其中,b使用aa,然后将a重新指定为b的值。

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

请参阅How does swapping of members in the python tuples (a,b)=(b,a) work internally?,了解在字节码级别上这一切是如何工作的。

11

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

a = 2
b = 3

所以,当你这样做:

a, b = b, a + b

所发生的是,您创建元组(b, a + b)(3, 5),然后将其解压缩到ab中,因此a变为3b变为5

在你的第二个例子:

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

让我们摸索一下。

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
所以它相当于:

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

综上所述,a, b = b, a+b表示,
a交换得到b的 old_value,
b交换得到旧值a和旧值b的和,

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(174)
双向数据绑定原理:Angular中的双向数据绑定
上一篇
S3数据库:什么数据存储 /数据库在S3上运行
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(20条)