亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作

瀏覽:5日期:2022-06-17 17:03:44
python 兩個(gè)變量值交換

方法一:

c = 0c= aa= bb= c

方法二:

a,b = b,a

這是python的基本方法

方法三:(只用兩個(gè)變量實(shí)現(xiàn))

a = a+bb = a-ba = a-bpython兩個(gè)數(shù)值互換(淺析a,b=b,a原理)

python交換兩個(gè)值得方法非常簡(jiǎn)單,即a,b=b,a,一步操作就交換了兩個(gè)值,那么這是為什么呢?

真相:

Python的變量并不直接存儲(chǔ)值,而只是引用一個(gè)內(nèi)存地址,交換變量時(shí),只是交換了引用的地址。

先看下面這段程序:

import disdef func(a,b): a,b=b,a print(a,b) a=10b=20func(a,b)dis.dis(func)

一般來(lái)說(shuō)一個(gè)Python語(yǔ)句會(huì)對(duì)應(yīng)若干字節(jié)碼指令,Python的字節(jié)碼是一種類(lèi)似匯編指令的中間語(yǔ)言,但是一個(gè)字節(jié)碼指令并不是對(duì)應(yīng)一個(gè)機(jī)器指 令(二進(jìn)制指令),而是對(duì)應(yīng)一段C代碼,而不同的指令的性能不同,所以不能單獨(dú)通過(guò)指令數(shù)量來(lái)判斷代碼的性能,而是要通過(guò)查看調(diào)用比較頻繁的指令的代碼來(lái) 確認(rèn)一段程序的性能。

一個(gè)Python的程序會(huì)有若干代碼塊組成,例如一個(gè)Python文件會(huì)是一個(gè)代碼塊,一個(gè)類(lèi),一個(gè)函數(shù)都是一個(gè)代碼塊,一個(gè)代碼塊會(huì)對(duì)應(yīng)一個(gè)運(yùn)行的上下文環(huán)境以及一系列的字節(jié)碼指令。

dis的作用

dis模塊主要是用來(lái)分析字節(jié)碼的一個(gè)內(nèi)置模塊,經(jīng)常會(huì)用到的方法是dis.dis([bytesource]),參數(shù)為一個(gè)代碼塊,可以得到這個(gè)代碼塊對(duì)應(yīng)的字節(jié)碼指令序列。

代碼輸出結(jié)果

python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作

其中只看前面為12的結(jié)果就行了(在我的編譯器里,交換的那一行代碼在第12行)

可以看出主要是ROT_TWO指令的功勞:

查閱python文檔可以知道有ROT_TWO (源碼1398行),ROT_THREE(源碼1406行), ROT_FOUR這樣的指令,可以直接

交換兩個(gè)變量、三個(gè)變量、四個(gè)變量的值

在python3.4的源碼中查閱ceval.c文件可以看到:

TARGET(ROT_TWO) { PyObject *top = TOP(); PyObject *second = SECOND(); SET_TOP(second); SET_SECOND(top); FAST_DISPATCH(); }TARGET(ROT_THREE) { PyObject *top = TOP(); PyObject *third = THIRD(); SET_SECOND(third); FAST_DISPATCH();}附:python值的交換

變量的每一次初始化,都開(kāi)辟了一個(gè)新的空間,將新內(nèi)容的地址賦值給變量。對(duì)于下圖來(lái)說(shuō),我們重復(fù)的給str1賦值,其實(shí)在內(nèi)存中的變化如圖:

python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作

從上圖我們可以看出,str1在重復(fù)的初始化過(guò)程中,是因?yàn)閟tr1中存儲(chǔ)的元素地址由’hello world’的地址變成了’new hello world’的。

對(duì)于復(fù)雜的數(shù)據(jù)類(lèi)型來(lái)說(shuō),改變其內(nèi)部的值對(duì)于變量的影響:

python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作

python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作

當(dāng)對(duì)列表中的元素進(jìn)行一些增刪改的操作的時(shí)候,是不會(huì)影響到lst1列表本身對(duì)于整個(gè)列表地址的,只會(huì)改變其內(nèi)部元素的地址引用。

可是當(dāng)我們對(duì)于一個(gè)列表重新初始化(賦值)的時(shí)候,就給lst1這個(gè)變量重新賦予了一個(gè)地址,覆蓋了原本列表的地址,這個(gè)時(shí)候,lst1列表的內(nèi)存id就發(fā)生了改變。上面這個(gè)道理用在所有復(fù)雜的數(shù)據(jù)類(lèi)型中都是一樣的。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本一区二区不卡视频 | 国产17部性孕妇孕交在线 | 毛片一级做a爰片性色 | 免费一级特黄 欧美大片 | 日韩美a一级毛片 | 中国一级性生活片 | 日韩国产在线播放 | 成人a毛片高清视频 | 亚州精品视频 | 亚洲第一中文字幕 | 日韩在线视频网址 | 久久精品www | 精品国产高清久久久久久小说 | 精品一区二区三区波多野结衣 | 精品久久久中文字幕二区 | 久久亚洲精品tv | 一级特黄a免费大片 | 99国产精品久久久久久久... | 婷婷在线成人免费观看搜索 | 国产亚洲精品成人一区看片 | 国产精品免费视频能看 | 亚洲精品一区国产二区 | 欧美一级片免费观看 | 欧美兽皇video | 青青草国产一区二区三区 | 国产成人mv在线观看入口视频 | 91久久综合九色综合欧美98 | 经典国产一级毛片 | 99精品视频一区在线观看miya | 琪琪午夜伦埋大全影院 | 色香欲综合成人免费视频 | 免费一级肉体全黄毛片高清 | 色老头老太做爰视频在线观看 | 成人综合在线视频 | 欧美成年人网站 | 在线观看欧美亚洲日本专区 | 欧美一级特黄特黄做受 | 日韩视频在线观看一区二区 | 中文三级视频 | 国产亚洲自拍一区 | 美女视频免费看视频网站 |