您好,登錄后才能下訂單哦!
前言
今天無意中發(fā)現(xiàn)在python中的一個(gè)多重賦值的小問題,自己一開始是比較簡單化的理解了這個(gè)多重賦值操作的概念,所以導(dǎo)致在一道實(shí)現(xiàn)斐波那契數(shù)列的代碼中,發(fā)現(xiàn)了自己的問題,順便記錄下吧,當(dāng)作是學(xué)習(xí)總結(jié)。
首先是python的多重賦值操作,先用一個(gè)直觀的代碼來看:
a,b = 0,1
上述就是一個(gè)最簡單的多重賦值操作,這個(gè)賦值操作的作用是將賦值操作 = 右側(cè)的對象逐一賦給左側(cè)的對象,所以這個(gè)操作結(jié)果是a對象的值為0,b對象的值為1,這點(diǎn)很好理解。
然鵝,如果是下列的代碼呢?
# Fibonacci series: a, b = 0, 1 while b < 10: print b a, b = b, a + b
顯然,運(yùn)行結(jié)果是正確的:
1
1
2
3
5
8
那么如果將代碼改成這樣呢?
#Fibonacci series: a = 0 b = 1 while b < 10: print b a = b b = a + b
運(yùn)行結(jié)果是:
1
2
4
8
顯然不正確。。。。
其實(shí)問題在于多重賦值操作是一個(gè)等號右邊表達(dá)式會在賦值操作進(jìn)行之前被完全解析的過程。也就是說,對于
a, b = 0, 1
變量a和b是同時(shí)獲得新的值0和1。而對于
a, b = b, a + b
說明等號右邊的表達(dá)式在賦值之前首先被完全解析。右側(cè)表達(dá)式是從左到右計(jì)算的。在賦值完成之前,a+b的操作是已經(jīng)完成了表達(dá)式的計(jì)算結(jié)果了的,所以,如果將 a,b = b, a+b 等同于 a = b,b = a+b 是完全不正確的。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。