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