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