亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python 實現兩個變量值進行交換的n種操作

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

python 兩個變量值交換

方法一:

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

方法二:

a,b = b,a 

這是python的基本方法

方法三:(只用兩個變量實現)

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

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

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

真相:

Python的變量并不直接存儲值,而只是引用一個內存地址,交換變量時,只是交換了引用的地址。

先看下面這段程序:

import dis

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

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

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

dis的作用   

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

代碼輸出結果

這里寫圖片描述

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

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

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

交換兩個變量、三個變量、四個變量的值

在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值的交換

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

這里寫圖片描述

從上圖我們可以看出,str1在重復的初始化過程中,是因為str1中存儲的元素地址由'hello world'的地址變成了'new hello world'的。

對于復雜的數據類型來說,改變其內部的值對于變量的影響:

這里寫圖片描述

這里寫圖片描述

當對列表中的元素進行一些增刪改的操作的時候,是不會影響到lst1列表本身對于整個列表地址的,只會改變其內部元素的地址引用。

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python實現控制臺中的進度條功能代碼

    Python實現控制臺中的進度條功能代碼

    下面小編就為大家分享一篇Python實現控制臺中的進度條功能代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • python內置HTTP Server如何實現及原理解析

    python內置HTTP Server如何實現及原理解析

    這篇文章主要為大家介紹了python內置HTTP Server如何實現及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python調用golang代碼詳解

    Python調用golang代碼詳解

    這篇文章主要給大家介紹了關于Python調用golang代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • pycharm利用pyspark遠程連接spark集群的實現

    pycharm利用pyspark遠程連接spark集群的實現

    由于工作需要,利用spark完成機器學習。因此需要對spark集群進行操作。所以利用pycharm和pyspark遠程連接spark集群。感興趣的可以了解一下
    2021-05-05
  • python掃描proxy并獲取可用代理ip的實例

    python掃描proxy并獲取可用代理ip的實例

    下面小編就為大家?guī)硪黄猵ython掃描proxy并獲取可用代理ip的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python中matplotlib調整圖例位置的方法實例

    python中matplotlib調整圖例位置的方法實例

    在matplotlib中,一般圖例默認是在圖表內部的,如果要放置到圖例外面,需要對坐標進行指定,下面這篇文章主要給大家介紹了關于python中matplotlib調整圖例位置的相關資料,需要的朋友可以參考下
    2022-06-06
  • python2和python3在處理字符串上的區(qū)別詳解

    python2和python3在處理字符串上的區(qū)別詳解

    這篇文章主要介紹了python2和python3在處理字符串上的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Python基礎之with語句和上下文管理器詳解

    Python基礎之with語句和上下文管理器詳解

    這篇文章主要為大家詳細介紹了Python中with語句和上下文管理器的具體使用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • Python numpy.array()生成相同元素數組的示例

    Python numpy.array()生成相同元素數組的示例

    今天小編就為大家分享一篇Python numpy.array()生成相同元素數組的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python利用WMI實現ping命令的例子

    Python利用WMI實現ping命令的例子

    今天小編就為大家分享一篇Python利用WMI實現ping命令的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論