1. 程式人生 > >函數的參數傳遞(轉)

函數的參數傳遞(轉)

clas 傳遞 輸出結果 blog pen 指向 ron list 不可

首先說python傳遞參數的問題,python有可變對象(比如列表)和不可變對象(比如字符串),在參數傳遞是分為兩種情況

1、對於不可變對象作為函數參數,相當於C語言的值傳遞

2、對於可變對象作為函數參數,相當於C語言的引用傳遞

def add(num):
    num=num+10
d=2
add(d)
print(d)

理所當然的輸出2,為什麽呢?定義了一個變量d,d指向數字2,然後執行add方法,是復制d到num,剛開始num也指向數字2,在函數體內給num+10,整數是不可變對象,所以,將num+10的結果賦值給num變量,此時num指向num+10也就是12,而d本身並沒有發生改變,仍然指向2。

在Python中,對於不可變對象,調用自身的任意方法,並不會改變對象自身的內容,這些方法會創建新的對象並返回,保證了不可變對象本身是永遠不可變的。

當參數為不可變對象時,這裏我們以列表list舉例說明:
如下代碼:
def change(num):
    num.append(1)
d = [0]
change(d)
print d 
上述代碼的輸出結果為 [0,1],現在來分析原因。執行change()方法時,num指向列表[0],因為列表是可變對象,直接作用在原來list上並不會產生新的對象,所以返回[0,1]。
也就是Python在傳遞參數時在可變對象和不可變對象的傳遞上是有區別的。
def
add(num): num = num + 10 d=2 add(d) print d

這段代碼輸出 2

如果我要像C那樣傳遞d的地址,使之輸出12,我應該怎麽做?
如上所述,我們知道,對於不可變對象,並不會改變對象自身的值,只會創建新的對象,那麽,我們只需要將新創建的對象利用函數返回到d即可,代碼如下:
def add(num):
    num = num + 10
    return num

d = 2
d = add(d)
print d



作者:oYabea
鏈接:https://www.zhihu.com/question/20591688/answer/128044544
來源:知乎

函數的參數傳遞(轉)