摘要:在編程語(yǔ)言中,函數(shù)的參數(shù)傳遞有兩種情況按值類型傳遞調(diào)用該函數(shù),傳入一個(gè)變量,其實(shí)傳入的是該變量的一個(gè)副本,該變量在函數(shù)中發(fā)生變化,不影響函數(shù)外面該變量。
在編程語(yǔ)言中,函數(shù)的參數(shù)傳遞有兩種情況:
按值類型傳遞
num = 10 def double(arg): arg=arg*2 print(arg) double(num)
調(diào)用該函數(shù),傳入一個(gè)變量,其實(shí)傳入的是該變量的一個(gè)副本,該變量在函數(shù)中發(fā)生變化,不影響函數(shù)外面該變量。
按引用類型(地址)傳遞
def change(arg): arg.append("More data") print(arg) saying = [42,34,55] change(saying)
調(diào)用該函數(shù),傳入一個(gè)變量,但是函數(shù)內(nèi)部卻是維護(hù)該變量的一個(gè)指向鏈接,鏈接到函數(shù)外面的這個(gè)變量;當(dāng)傳入函數(shù)的這個(gè)變量在函數(shù)內(nèi)部發(fā)生改變,直接影響到外面的最初變量,因?yàn)橛兄赶蜿P(guān)系。
python中的函數(shù)參數(shù)既支持按值調(diào)用,也支持按引用調(diào)用。
python中的變量是對(duì)象引用:變量存儲(chǔ)的值是內(nèi)存地址。當(dāng)函數(shù)被調(diào)用的時(shí)候,解釋器會(huì)查看傳入的變量(內(nèi)存地址)指的那個(gè)指的類型,如果是一個(gè)可變類型的值,就按照引用傳遞變量;如果是一個(gè)非可變類型的值,就考慮按照值傳遞變量。
可變類型:字典dict,列表list,集合set:
傳入函數(shù)中的變量,函數(shù)內(nèi)部的修改都會(huì)反映到函數(shù)外面,即最初始的變量會(huì)受到影響,畢竟這些初始的變量是可變類型。
不可變類型:字符串srt,整數(shù)int,元組trulp:
在這中,函數(shù)對(duì)變量的任何修改都是函數(shù)私有的,不會(huì)反映到函數(shù)外面,由于這些變量是不可變的,所以不能修改。
例外:
def double(arg): print("before: ",arg) arg = arg * 2 print("After: ",arg)
根據(jù)上面所說(shuō)的,為什么這個(gè)函數(shù)里面的參數(shù),傳入的一個(gè)可變類型,函數(shù)內(nèi)部發(fā)生了改變,結(jié)果卻沒有反映到函數(shù)外面呢?
我們考慮到這條語(yǔ)句:arg = arg*2
首先,傳入的變量,先執(zhí)行arg*2,所產(chǎn)生的新的變量(新對(duì)象的引用),重新賦值給原先的變量arg,覆蓋其原先的引用,導(dǎo)致原先的變量arg與外面初始變量之間的聯(lián)系斷了。既然關(guān)系斷了,那么函數(shù)里面的arg 的改變,沒有反映出來(lái),所以并沒有影響到函數(shù)外面的變量。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41957.html
摘要:前言為什么有調(diào)用腳本呢直接不就行了嗎這里主要是用于遠(yuǎn)程調(diào)用時(shí)這種調(diào)用在運(yùn)維場(chǎng)景中是比較多的,類似下面這樣的調(diào)用遠(yuǎn)程調(diào)用這里有個(gè)問題就是傳遞較多參數(shù)時(shí)如何傳遞比如傳遞字典傳遞列表等我們可以發(fā)現(xiàn),如果直接傳遞,往往傳過(guò)去后不能很好的解析因?yàn)檫@ 前言: 為什么有python調(diào)用python腳本呢?直接import不就行了嗎?這里主要是用于遠(yuǎn)程調(diào)用時(shí),這種調(diào)用在運(yùn)維場(chǎng)景中是比較多的,類似下面這...
摘要:另外說(shuō)下,函數(shù)的返回值,也相當(dāng)于是一次賦值。只不過(guò),這時(shí)候是把函數(shù)內(nèi)部返回值所指向的對(duì)象,賦值給外面函數(shù)的調(diào)用者輸出函數(shù)結(jié)束后,這個(gè)標(biāo)簽雖然不存在了,但所指向的對(duì)象依然存在,就是指向的新對(duì)象。 還記得上一次關(guān)于變量作用域文章 : Crossin:全菊變量和菊部變量zhuanlan.zhihu.comshowImg(https://segmentfault.com/img/remote/...
摘要:作者本文原載于,不允許轉(zhuǎn)載的參數(shù)傳遞的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)象數(shù)字字符元組等的參數(shù),更類似值傳遞對(duì)于可變對(duì)象列表字典等,更類似引用傳遞。 作者:LogM 本文原載于 https://segmentfault.com/u/logm/articles ,不允許轉(zhuǎn)載~ 1. Python 的參數(shù)傳遞 Python的參數(shù)傳遞,無(wú)法控制引用傳遞還是值傳遞。對(duì)于不可變對(duì)...
摘要:定義的函數(shù)定義使用通過(guò)返回執(zhí)行結(jié)果常用內(nèi)置常用內(nèi)置函數(shù)待補(bǔ)充絕對(duì)值計(jì)算判斷是否是類型列表中的值強(qiáng)制類型轉(zhuǎn)換小數(shù)時(shí)僅保留整數(shù)位強(qiáng)制類型轉(zhuǎn)換編碼轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換多值的函數(shù)是可以返回多值的定義調(diào)用可以看到,返回的多值是以形式輸出的參數(shù)的參數(shù)支持默 定義 Python的函數(shù)定義使用def def func_name(x): return hello world //通過(guò)return 返...
摘要:文末評(píng)論送書,學(xué)委會(huì)用這個(gè)抽獎(jiǎng)程序來(lái)進(jìn)行嚴(yán)格抽獎(jiǎng),周六晚上點(diǎn)整定時(shí)抽獎(jiǎng)并視頻公布出來(lái),敬請(qǐng)期待。本文講的函數(shù)值傳遞問題,是寫程序經(jīng)常遇到,特別的是動(dòng)態(tài)參數(shù)在高級(jí)框架中使用很廣泛。 ...
摘要:在調(diào)用函數(shù)時(shí),我們可以給該函數(shù)傳遞任意個(gè)參數(shù),包括個(gè)參數(shù)傳遞個(gè)參數(shù)傳遞個(gè)參數(shù)傳遞個(gè)參數(shù)傳遞個(gè)參數(shù)上面的表示任意參數(shù),實(shí)際上,它還有另外一個(gè)用法用來(lái)給函數(shù)傳遞參數(shù)。應(yīng)該使用不可變對(duì)象作為函數(shù)的默認(rèn)參數(shù)。 函數(shù)參數(shù) 在 Python 中,定義函數(shù)和調(diào)用函數(shù)都很簡(jiǎn)單,但如何定義函數(shù)參數(shù)和傳遞函數(shù)參數(shù),則涉及到一些套路了。總的來(lái)說(shuō),Python 的函數(shù)參數(shù)主要分為以下幾種: 必選參數(shù) 默認(rèn)參...
閱讀 1608·2021-09-30 09:47
閱讀 3618·2021-09-22 15:05
閱讀 2850·2021-08-30 09:44
閱讀 3627·2019-08-30 15:55
閱讀 1379·2019-08-30 13:08
閱讀 1334·2019-08-29 16:40
閱讀 558·2019-08-29 12:45
閱讀 1394·2019-08-29 11:25