python函式中引數是如何傳遞的?

2022-07-01 15:54:11 字數 1728 閱讀 8976

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 函式中,引數是傳值,還是傳引用?

在 c c 中,傳值和傳引用是函式引數傳遞的兩種方式,在python中引數是如何傳遞的?回答這個問題前,不如先來看兩段 段1 def foo arg arg 2 print arg a 1 foo a 輸出 2 print a 輸出 1 複製 看了 段1的同學可能會說引數是值傳遞。段2 def ba...

函式傳引數 python傳參是傳值還是傳引用

在此之前先來看看變數和物件的關係 python 中一切皆為物件,數字是物件,列表是物件,函式也是物件,任何東西都是物件。而變數是物件的乙個引用 又稱為名字或者標籤 物件的操作都是通過引用來完成的。例如,a 是乙個空列表物件,變數 a 是該物件的乙個引用 例1 輸出例2 輸出 id不一樣,所以說不是同...

函式傳引數 python 函式引數

1.位置引數 最熟悉的一種引數形式,優點 簡單。缺點 傳遞引數不夠靈活 2.預設引數 優點 提高了 的復用性 缺點 容易產生二義性 注意事項 一是必選引數在前,預設引數在後。二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。def p...