python引數傳遞方式

2022-04-17 00:46:30 字數 1572 閱讀 4484

python中一切皆物件,函式中引數傳遞的是物件的引用。

1在函式中改變變數指向的物件,即指向不同物件。

當在函式中修改傳遞進來的變數指向另乙個物件時,實參的物件不會改變。

>>> def fun(num,l,d):

... num=123;

... l=[1,2,3]

... d=

... print("inside:","num=%f,l=%s,d=%s"%(num,l,d))

...

>>> num=1

>>> l=[1,1,1]

>>> d=

>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))

before: num=1.000000,l=[1, 1, 1],d=

>>> fun(num,l,d)

inside: num=123.000000,l=[1, 2, 3],d=

>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))

after: num=1.000000,l=[1, 1, 1],d=

需要說明的是:函式內部的num,l,d和命令列裡的num,l,d是不同的變數,只是名字相同。函式內部的是形參,命令列裡的是實參。

2修改傳遞進來物件的內容,即不是讓形參指向不同物件,而是通過引用修改物件內容。當然這個物件必須是可變的。

>>> def fun2(num1,l1,d1):

... num1=123

... l1[0]=123

... d1['a']=123

... print("inside:","num1=%f,l1=%s,d1=%s"%(num1,l1,d1))

...

>>> num=111

>>> l=[1,1,1]

>>> d=

>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))

before: num=111.000000,l=[1, 1, 1],d=

>>> fun2(num,l,d)

inside: num1=123.000000,l1=[123, 1, 1],d1=

>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))

after: num=111.000000,l=[123, 1, 1],d=

小結:python中一切皆物件,函式中傳遞的是物件的引用,當形參指向了不同物件,實參不會改變;當形參通過傳遞來的引用修改了物件的內容,實參會跟著改變,因為形參和實參指向的是同乙個物件。其中不僅是函式引數的傳遞是這樣,在函式內部也是這樣。當乙個變數向另乙個變數賦值時,給的是物件的引用,這個物件的引用,感覺相當於c語言中變數的位址,只是在python中,這個位址變數是通用的,可以指向任意型別,當你改變了這個位址,相當與python中指向了不同物件,原來變數的位址沒有改變,所以原來變數指向的位址的內容沒有改變。當你通過這個位址改變了位址裡面的內容時,原來變數指向的位址的內容也會跟著改變。

python引數傳遞方式

如果函式接收到的引數是乙個可變物件 類型別,列表,字典 就會改變物件的原始值。如果函式接收到的引數是乙個不可變物件,即基本資料型別 數值型,字串,布林 就不會改變物件的原始值。無論什麼引數,都是傳引用,只不過基本資料型別的賦值其實是重新構造並指向了乙個新的物件,記憶體位址不一樣,可以用id 來查詢記...

Python 函式引數傳遞方式

引數 自變數 在python裡都是按引用傳遞,也就是傳遞的是變數位址,變數就是位址,沒有型別,而關聯的物件是有型別的 但是對於不可變變數,在函式內修改會申請新的記憶體空間,所以對外層函式沒有影響,對於list變數,相當於操作同一塊記憶體,則會影響外層函式。usr bin python 可寫函式說明 ...

python傳遞引數方式小結

當形參如 arg時表示傳入陣列,當形參如 args時表示傳入字典。def myprint commends,map for comm in commends print comm for key in map.keys print key,map key myprint hello word use...