關(guān)于python多重賦值的小問題
前言
今天無意中發(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è)的對(duì)象逐一賦給左側(cè)的對(duì)象,所以這個(gè)操作結(jié)果是a對(duì)象的值為0,b對(duì)象的值為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è)等號(hào)右邊表達(dá)式會(huì)在賦值操作進(jìn)行之前被完全解析的過程。也就是說,對(duì)于
a, b = 0, 1
變量a和b是同時(shí)獲得新的值0和1。而對(duì)于
a, b = b, a + b
說明等號(hào)右邊的表達(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)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳解Python list和numpy array的存儲(chǔ)和讀取方法
這篇文章主要介紹了詳解Python list和numpy array的存儲(chǔ)和讀取方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python環(huán)境下安裝PyGame和PyOpenGL的方法
這篇文章主要介紹了Python環(huán)境下安裝PyGame和PyOpenGL的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
python3中apply函數(shù)和lambda函數(shù)的使用詳解
本文主要介紹了python3中apply函數(shù)和lambda函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
使用tensorflow實(shí)現(xiàn)矩陣分解方式
今天小編就為大家分享一篇使用tensorflow實(shí)現(xiàn)矩陣分解方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
http請(qǐng)求 request失敗自動(dòng)重新嘗試代碼示例
這篇文章主要介紹了http請(qǐng)求 request失敗自動(dòng)重新嘗試代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)利用PyTorch進(jìn)行回歸運(yùn)算
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)利用PyTorch進(jìn)行回歸運(yùn)算的實(shí)現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

