python中参数传递_python中参数传递
在編程語言中,函數的參數傳遞有兩種情況:
按值類型傳遞
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 的改變,沒有反映出來,所以并沒有影響到函數外面的變量。
總結
以上是生活随笔為你收集整理的python中参数传递_python中参数传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python flask框架教程_Fla
- 下一篇: python多个变量与字符串判断_pyt