關(guān)于python多重賦值的小問(wèn)題
前言
今天無(wú)意中發(fā)現(xiàn)在python中的一個(gè)多重賦值的小問(wèn)題,自己一開(kāi)始是比較簡(jiǎn)單化的理解了這個(gè)多重賦值操作的概念,所以導(dǎo)致在一道實(shí)現(xiàn)斐波那契數(shù)列的代碼中,發(fā)現(xiàn)了自己的問(wèn)題,順便記錄下吧,當(dāng)作是學(xué)習(xí)總結(jié)。
首先是python的多重賦值操作,先用一個(gè)直觀的代碼來(lái)看:
a,b = 0,1
上述就是一個(gè)最簡(jiǎn)單的多重賦值操作,這個(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í)問(wèn)題在于多重賦值操作是一個(gè)等號(hào)右邊表達(dá)式會(huì)在賦值操作進(jìn)行之前被完全解析的過(guò)程。也就是說(shuō),對(duì)于
a, b = 0, 1
變量a和b是同時(shí)獲得新的值0和1。而對(duì)于
a, b = b, a + b
說(shuō)明等號(hào)右邊的表達(dá)式在賦值之前首先被完全解析。右側(cè)表達(dá)式是從左到右計(jì)算的。在賦值完成之前,a+b的操作是已經(jīng)完成了表達(dá)式的計(jì)算結(jié)果了的,所以,如果將 a,b = b, a+b 等同于 a = b,b = a+b 是完全不正確的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
linux 下實(shí)現(xiàn)python多版本安裝實(shí)踐
這篇文章主要介紹了linux 下實(shí)現(xiàn)python多版本安裝實(shí)踐,需要的朋友可以參考下2014-11-11python動(dòng)態(tài)視頻下載器的實(shí)現(xiàn)方法
這里向大家分享一下python爬蟲(chóng)的一些應(yīng)用,主要是用爬蟲(chóng)配合簡(jiǎn)單的GUI界面實(shí)現(xiàn)視頻,音樂(lè)和小說(shuō)的下載器。今天就先介紹如何實(shí)現(xiàn)一個(gè)動(dòng)態(tài)視頻下載器,需要的朋友可以參考下2019-09-09Python 對(duì)輸入的數(shù)字進(jìn)行排序的方法
今天小編就為大家分享一篇Python 對(duì)輸入的數(shù)字進(jìn)行排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06淺談tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意點(diǎn)
這篇文章主要介紹了淺談tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06選擇Python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)勢(shì)和理由
在本篇文章里小編給各位整理了一篇關(guān)于選擇Python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)的優(yōu)勢(shì)和理由以及相關(guān)代碼實(shí)例,有興趣的朋友們閱讀下吧。2019-07-07