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

Python參數(shù)傳遞實(shí)現(xiàn)過(guò)程及原理詳解

 更新時(shí)間:2020年05月14日 10:15:55   投稿:yaominghui  
這篇文章主要介紹了Python參數(shù)傳遞實(shí)現(xiàn)過(guò)程及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在分析python的參數(shù)傳遞是如何進(jìn)行的之前,我們需要先來(lái)了解一下,python變量和賦值的基本原理,這樣有助于我們更好的理解參數(shù)傳遞。

python變量以及賦值

數(shù)值

從幾行代碼開(kāi)始

In [1]: a = 1
In [2]: b = a
In [3]: a = a + 1

我們先將1賦值給a,也就是a指向了1這個(gè)對(duì)象,在python中一切皆對(duì)象。接著b=a,則表示讓b也指向了1這個(gè)對(duì)象,python中一個(gè)對(duì)象是可以被多個(gè)引用所指向。最后執(zhí)行的a=a+1,這里需要注意一點(diǎn),python的數(shù)據(jù)類(lèi)型中如int、str等不可變類(lèi)型,執(zhí)a=a+1這種操作,并不是把a(bǔ)指向的對(duì)象的值增加1,而是生成一個(gè)新的對(duì)象2,并讓a指向2這個(gè)對(duì)象,原來(lái)的對(duì)象還存在于內(nèi)存中。那這里的話還是會(huì)被指向,我們來(lái)分別看一下a和b的值:

In [4]: a
Out[4]: 2

In [5]: b
Out[5]: 1

通過(guò)這個(gè)例子你可以看到,這里的 a 和 b,開(kāi)始只是兩個(gè)指向同一個(gè)對(duì)象的變量而已,或者你也可以把它們想象成同一個(gè)對(duì)象的兩個(gè)名字。簡(jiǎn)單的賦值 b = a,并不表示重新創(chuàng)建了新對(duì)象,只是讓同一個(gè)對(duì)象被多個(gè)變量指向或引用。同時(shí),指向同一個(gè)對(duì)象,也并不意味著兩個(gè)變量就被綁定到了一起。如果你給其中一個(gè)變量重新賦值,并不會(huì)影響其他變量的值。

列表

還有一個(gè)列表的例子,再來(lái)瞅瞅:

In [6]: l1 = [3,4,5,6]
In [7]: l2 = l1
In [10]: l1.append(7)
In [11]: l1
Out[11]: [3, 4, 5, 6, 7]
In [12]: l2
Out[12]: [3, 4, 5, 6, 7]

代碼中,我們讓l1和l2這兩個(gè)變量都指向了[3,4,5,6]這個(gè)對(duì)象,我們知道列表是一種可變的數(shù)據(jù)結(jié)構(gòu),所以append操作并不會(huì)產(chǎn)生新的對(duì)象,只是在末尾添加了一個(gè)元素,變成了[3, 4, 5, 6, 7],由于 l1 和 l2 同時(shí)指向這個(gè)列表,所以列表的變化會(huì)同時(shí)反映在 l1 和 l2 這兩個(gè)變量上,那么,l1 和 l2 的值就同時(shí)變?yōu)榱薣3, 4, 5, 6, 7]。

對(duì)象刪除

python中變量是可以刪除的,但是對(duì)象是沒(méi)辦法刪除的

In [22]: a = [1,4,5]

In [23]: del a

del語(yǔ)句刪除a這個(gè)變量,就無(wú)法通過(guò)a訪問(wèn)[1,4,5],但是這個(gè)對(duì)象在存在中還是存在的,python的垃圾回收機(jī)制發(fā)現(xiàn)引用為0的時(shí)候就會(huì)把它回收掉。

總結(jié)

  • 變量的賦值,只是表示讓變量指向了某個(gè)對(duì)象,并不表示拷貝對(duì)象給變量;而一個(gè)對(duì)象,可以被多個(gè)變量所指向
  • 可變對(duì)象(列表,字典,集合等等)的改變,會(huì)影響所有指向該對(duì)象的變量
  • 對(duì)于不可變對(duì)象(字符串、整型、元組等等),所有指向該對(duì)象的變量的值總是一樣的,也不會(huì)改變。但是通過(guò)某些操作(+= 等等)更新不可變對(duì)象的值時(shí),會(huì)返回一個(gè)新的對(duì)象
  • 變量可以被刪除,但是對(duì)象無(wú)法被刪除

python函數(shù)是如何進(jìn)行參數(shù)傳遞的

python的參數(shù)傳遞是賦值傳遞或者說(shuō)是引用傳遞,python里一切皆對(duì)象,所以參數(shù)傳遞時(shí),只是讓新變量與原變量指向了同一個(gè)對(duì)象,下面我們來(lái)看個(gè)例子:

In [28]: def func(b):
  ...:   b = 2

In [29]: a = 1

In [30]: func(a)

In [31]: a
Out[31]: 1

這里的參數(shù)傳遞,使變量 a 和 b 同時(shí)指向了 1 這個(gè)對(duì)象。但當(dāng)我們執(zhí)行到 b = 2 時(shí),系統(tǒng)會(huì)重新創(chuàng)建一個(gè)值為 2 的新對(duì)象,并讓 b 指向它;而 a 仍然指向 1 這個(gè)對(duì)象。所以,a 的值不變,仍然為 1。

如何改變a的值呢?

我們可以在函數(shù)中將b返回

def func(b):
  b = 2
  return b
a = 1
a = func(a)
a
2

上面的例子我們的是int類(lèi)型的,下面我們看一下列表的例子:

def func(l2):
  l2.append(77)

l1 = [12,3,6]
func(l1)
l1
[12,3,6,77]

這里 l1 和 l2 先是同時(shí)指向值為[1, 2, 3]的列表。不過(guò),由于列表可變,執(zhí)行 append() 函數(shù),對(duì)其末尾加入新元素 4 時(shí),變量 l1 和 l2 的值也都隨之改變了.

那大家看一下面的例子,結(jié)果是什么呢?

def func(l2):
  l2 = l2 + [4]

l1 = [12,3,6]
func(l1)
l1
[12,3,6]

可以看到,l1沒(méi)有發(fā)生變化,原因是l2 + [4]這個(gè)操作表示創(chuàng)建了一個(gè)末尾加入元素 4的新列表,并讓 l2 指向這個(gè)新的對(duì)象,l1還是指向原有的對(duì)象。

總結(jié)

今天,我們討論了 Python 的變量及其賦值的基本原理,并且解釋了 Python 中參數(shù)是如何傳遞的。和其他語(yǔ)言不同的是,Python 中參數(shù)的傳遞既不是值傳遞,也不是引用傳遞,而是賦值傳遞,或者是叫對(duì)象的引用傳遞。需要注意的是,這里的賦值或?qū)ο蟮囊脗鬟f,不是指向一個(gè)具體的內(nèi)存地址,而是指向一個(gè)具體的對(duì)象。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談python中列表、字符串、字典的常用操作

    淺談python中列表、字符串、字典的常用操作

    下面小編就為大家?guī)?lái)一篇淺談python中列表、字符串、字典的常用操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Python 迭代器介紹及作用詳情

    Python 迭代器介紹及作用詳情

    這篇文章主要介紹了Python 迭代器介紹及作用詳情,Python 中的迭代器是一個(gè)對(duì)象,用于迭代列表、元組、字典和集合等可迭代對(duì)象,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07
  • pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法

    pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法

    這篇文章主要介紹了pycharm中選中一個(gè)單詞替換所有重復(fù)單詞的實(shí)現(xiàn)方法,類(lèi)似于sublime 里的ctrl+D功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • python上selenium的彈框操作實(shí)現(xiàn)

    python上selenium的彈框操作實(shí)現(xiàn)

    這篇文章主要介紹了python上selenium的彈框操作實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置

    本文主要介紹了Win10操作系統(tǒng)中PyTorch虛擬環(huán)境配置+PyCharm配置,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python中執(zhí)行shell的兩種方法總結(jié)

    python中執(zhí)行shell的兩種方法總結(jié)

    這篇文章主要介紹了python中執(zhí)行shell的兩種方法,有兩種方法可以在Python中執(zhí)行SHELL程序,方法一是使用Python的commands包,方法二則是使用subprocess包,這兩個(gè)包均是Python現(xiàn)有的內(nèi)置模塊。需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例

    Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例,本文直接給出兩個(gè)實(shí)現(xiàn)例子,需要的朋友可以參考下
    2015-02-02
  • python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例

    python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例

    這篇文章主要介紹了python基于json文件實(shí)現(xiàn)的gearman任務(wù)自動(dòng)重啟代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python使用graphviz畫(huà)流程圖過(guò)程解析

    Python使用graphviz畫(huà)流程圖過(guò)程解析

    這篇文章主要介紹了Python使用graphviz畫(huà)流程圖過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python threading.local代碼實(shí)例及原理解析

    Python threading.local代碼實(shí)例及原理解析

    這篇文章主要介紹了Python threading.local代碼實(shí)例及原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

会昌县| 乡城县| 连南| 长泰县| 碌曲县| 定南县| 洪江市| 东兰县| 永顺县| 凤台县| 句容市| 金寨县| 大同市| 灯塔市| 拉孜县| 龙陵县| 曲水县| 定日县| 郧西县| 二连浩特市| 外汇| 织金县| 谷城县| 门源| 美姑县| 阿拉善左旗| 丁青县| 陆丰市| 同德县| 苏州市| 龙里县| 门源| 海门市| 常宁市| 闻喜县| 莱州市| 富宁县| 昆山市| 泰顺县| 东明县| 雷波县|