最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年06月02日 10:12:20   作者:weixin_41738813  
這篇文章主要介紹了python 實(shí)現(xiàn)兩個(gè)變量值進(jìn)行交換的n種操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python 兩個(gè)變量值交換

方法一:

c = 0
c= a
a= b
b= c

方法二:

a,b = b,a 

這是python的基本方法

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

a = a+b
b = a-b
a = a-b

python兩個(gè)數(shù)值互換(淺析a,b=b,a原理)

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

真相:

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

先看下面這段程序:

import dis

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

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

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

dis的作用   

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

代碼輸出結(jié)果

這里寫圖片描述

其中只看前面為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值的交換

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

這里寫圖片描述

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

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

這里寫圖片描述

這里寫圖片描述

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 中 .py文件 轉(zhuǎn) .pyd文件的操作

    python 中 .py文件 轉(zhuǎn) .pyd文件的操作

    這篇文章主要介紹了python 中 .py文件 轉(zhuǎn) .pyd文件的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 在Python中如何優(yōu)雅地創(chuàng)建表格的實(shí)現(xiàn)

    在Python中如何優(yōu)雅地創(chuàng)建表格的實(shí)現(xiàn)

    本文主要介紹了在Python中如何優(yōu)雅地創(chuàng)建表格的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解python中asyncio模塊

    詳解python中asyncio模塊

    本篇文章給大家詳細(xì)分析了python中重要的asyncio模塊相關(guān)知識點(diǎn),有興趣的朋友可以學(xué)習(xí)參考下。
    2018-03-03
  • python Scrapy框架原理解析

    python Scrapy框架原理解析

    這篇文章主要介紹了python Scrapy框架原理的相關(guān)資料,幫助大家更好的理解和使用python爬蟲,感興趣的朋友可以了解下
    2021-01-01
  • 100 個(gè) Python 小例子(練習(xí)題一)

    100 個(gè) Python 小例子(練習(xí)題一)

    這篇文章主要介紹 Python 小例子,有數(shù)字組合、個(gè)稅計(jì)算、完全平方數(shù)、三數(shù)排序、斐波那契數(shù)列、copy、九九乘法表、暫停一秒輸出等多個(gè)實(shí)例,需要的朋友可以參考一下
    2021-10-10
  • 淺談Python之Django

    淺談Python之Django

    這篇文章主要介紹了Python3中的Django,小編覺得這篇文章寫的還不錯(cuò),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧,希望能夠給你帶來幫助
    2021-10-10
  • Python語言技巧之三元運(yùn)算符使用介紹

    Python語言技巧之三元運(yùn)算符使用介紹

    現(xiàn)在大部分高級語言都支持“?”這個(gè)三元運(yùn)算符(ternary operator),它對應(yīng)的表達(dá)式如下:condition ? value if true : value if false。很奇怪的是,這么常用的運(yùn)算符python居然不支持
    2013-03-03
  • Python中@符號的具體使用

    Python中@符號的具體使用

    本文主要介紹了Python中@符號的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python多線程下信號處理程序示例

    python多線程下信號處理程序示例

    這篇文章主要為大家詳細(xì)介紹了python多線程下信號處理程序示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 深度學(xué)習(xí)中shape[0]、shape[1]、shape[2]的區(qū)別詳解

    深度學(xué)習(xí)中shape[0]、shape[1]、shape[2]的區(qū)別詳解

    本文主要介紹了深度學(xué)習(xí)中shape[0]、shape[1]、shape[2]的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

太湖县| 新巴尔虎右旗| 汾阳市| 壶关县| 恩施市| 湟源县| 亳州市| 剑川县| 平陆县| 若羌县| 东丰县| 乐昌市| 响水县| 蒙自县| 安多县| 新源县| 泽普县| 花莲市| 来安县| 建湖县| 溧阳市| 通化县| 舒兰市| 农安县| 时尚| 汽车| 张家口市| 桂阳县| 中山市| 桂平市| 凤冈县| 革吉县| 福泉市| 河东区| 从江县| 沈丘县| 扬州市| 时尚| 绥阳县| 常宁市| 闵行区|