在一行和几行上写东西之间的区别


问题内容

当我在一行上写东西时,用a,和两行分隔的区别在哪里?显然我不明白其中的区别,因为尽管下面的两个函数应该返回相同的结果。

def fibi(n):
    a, b = 0, 1
    for i in range(n):
        a, b = b, a + b
    return a

print(fibi(6))
> 8 # expected result (Fibonacci)

def fibi(n):
    a, b = 0, 1
    for i in range(n):
        a = b
        b = a + b 
    return a


print(fibi(6))
> 32

问题答案:

这是由于Python的元组解包。在第一个示例中,Python收集右侧的值,将其设为一个元组,然后将元组的值分别分配给左侧的名称。因此,如果a == 1和b
== 2:

   a, b = b, a + b
=> a, b = (2, 3)
=> a = 2, b = 3

但是在第二个示例中,这是常规分配:

   a = b
=> a = 2
   b = a + b
=> b = 4