簡體   English   中英

這2個代碼有什么區別

[英]What's the difference between this 2 code

我有 2 個不同的代碼,我得到了不同的答案。 我想知道有什么區別

x, y = 0, 1

while y < 50:
    print(y)
    x, y = y, x + y

x=0
y=1

while y < 50:
    print(y)
    x=y
    y=x+y

第一個代碼輸出是:1 1 2 3 5 8 13 21 34

和兩個代碼:1 2 4 8 16 32

x, y = y, x+y的構建體的使用的原始值在RHS元組xy執行任何任務之前xy在左側。 它相當於

new_y = y
new_x = x + y
x = new_x
y = new_y

x = y
y = x + y

y值是將x值(即y )添加到y 你已經失去了舊的價值。 你需要寫

old_x = x
x = y
y = old_x + y

元組解包是一種避免需要臨時變量old_x

區別在於評估的順序。

在第一個例子中,你有這個:

x, y = y, x + y

這是在右側計算兩個表達式,然后將它們存儲到一個元組中,然后在左側將它們解包。

因為這是一個“主”表達式(元組)的一部分,所以在元組的構造過程中不會更新任何變量。 這意味着:

y, x+y evaluates as (old value of y), (old value of x) + (old value of y)

一旦構造了元組,就設置了xy

您的第二個示例通過將賦值放入不同的語句中使事情明顯不同。 這會導致在計算第二個賦值之前更改 x 的值:

x=y
y = x + y

這相當於:

x = (old value of y)
y = (old value of y) + (new value of x == old value of y)

這將y設置為2 * y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM