亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Python參數傳遞實現過程及原理詳解

瀏覽:2日期:2022-07-25 15:43:44

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

python變量以及賦值

數值

從幾行代碼開始

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

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

In [4]: aOut[4]: 2In [5]: bOut[5]: 1

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

列表

還有一個列表的例子,再來瞅瞅:

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

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

對象刪除

python中變量是可以刪除的,但是對象是沒辦法刪除的

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

In [23]: del a

del語句刪除a這個變量,就無法通過a訪問[1,4,5],但是這個對象在存在中還是存在的,python的垃圾回收機制發(fā)現引用為0的時候就會把它回收掉。

總結

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

python函數是如何進行參數傳遞的

python的參數傳遞是賦值傳遞或者說是引用傳遞,python里一切皆對象,所以參數傳遞時,只是讓新變量與原變量指向了同一個對象,下面我們來看個例子:

In [28]: def func(b): ...: b = 2In [29]: a = 1In [30]: func(a)In [31]: aOut[31]: 1

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

如何改變a的值呢?

我們可以在函數中將b返回

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

上面的例子我們的是int類型的,下面我們看一下列表的例子:

def func(l2): l2.append(77)l1 = [12,3,6]func(l1)l1[12,3,6,77]

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

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

def func(l2): l2 = l2 + [4]l1 = [12,3,6]func(l1)l1[12,3,6]

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

總結

今天,我們討論了 Python 的變量及其賦值的基本原理,并且解釋了 Python 中參數是如何傳遞的。和其他語言不同的是,Python 中參數的傳遞既不是值傳遞,也不是引用傳遞,而是賦值傳遞,或者是叫對象的引用傳遞。需要注意的是,這里的賦值或對象的引用傳遞,不是指向一個具體的內存地址,而是指向一個具體的對象。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产小视频你懂的 | 久久精品视频在线播放 | 日本人一级大毛片 | 国产高清a毛片在线看 | 日本免费专区 | 亚洲欧美综合人成野草 | 黑人性较大a | 九九99香蕉在线视频网站 | 99久久免费精品国产免费 | 国产男女性做爽歪歪爱视频 | 韩国19禁青草福利视频在线 | 亚洲中字 | 国产51社区精品视频资源 | 国产在线视频区 | 轻轻碰在线视频免费视频 | 国产福利足控交在线观看 | 免费观看黄色a一级录像 | 亚洲综合在线观看一区www | 古代级a毛片可以免费看 | 在线观看国产一区二区三区99 | 尤物蜜芽福利国产污在线观看 | 一级毛片a| 岛国大片在线观看免费版 | 亚洲一区不卡视频 | 青青青爽国产在线视频 | 亚洲精品欧美在线 | 无码中文字幕日韩专区 | 西西444www | 日韩精品中文字幕视频一区 | 在线爱爱视频 | 亚洲成人中文 | 欧洲免费极品videos | 91麻豆网址 | 韩国福利影视一区二区三区 | 无码中文字幕乱在线观看 | 有人有片的观看免费视频 | 被公侵犯肉体中文字幕一区二区 | 国产白领丝袜办公室在线视频 | 国产亚洲一区二区三区在线 | 五月桃花网婷婷亚洲综合 | 国产精品亚洲专区在线播放 |