常用的引數傳遞分為值傳遞(對應形參)和引用傳遞(對應實參),形參和實參的一大區別就是改變形參原引數物件不會改變,而實參則會。
參考材料:
csdn
方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際引數的值。
如下:
a=
520b=a
print
(a,b)
b=600
print
(a,b)
結果會是:
520 520
520 600
或者在函式中:
def
add(a,b)
: a = a+b
b =3return a
a =2
b =1
print
(a,b)
print
(add(a,b)
)print
(a,b)
結果會是:
2 1
32 1
也稱位址傳遞,在方法呼叫時,實際上是把引數的引用(傳的是位址,而不是引數的值)傳遞給方法中對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方法執行中形式引數值的改變將會影響實際引數的值。
如下:
a =[1
,2]b = a
print
(a,b)b[0
]=2print
(a,b)
b =[2,
3]# 相當於重新賦值
print
(a,b)
結果會是:
[1, 2]
[1, 2]
[2, 2]
[2, 2]
[2, 2]
[2, 3]
在函式中:
def
add(a,b)
: a = a+b[0]
b[0]
=3return a
a =2
b =[1,
3]print
(a,b)
print
(add(a,b)
)print
(a,b)
結果會是:
2[1
,3]3
2[3,
3]
在python中,數字、字元或者元組等不可變物件型別都屬於值傳遞,而字典dict或者列表list等可變物件型別屬於引用傳遞,因此涉及列表等的引數傳遞需小心仔細。如果希望字典進行值傳遞,則需要用到copy方法,copy分為淺拷貝和深拷貝。如下:
import copy
l1 =[[
1,2]
,3]l2 = copy.copy(l1)
l3 = copy.deepcopy(l1)4)
l2[0]5
)l3[0]
6)print
(l1,l2,l3)
結果如下:
[
[1, 2, 5], 3]
[[1, 2, 5], 3, 4]
[[1, 2, 6], 3]
如上,copy.copy屬於淺拷貝,拷貝的是第一層list(l2[0]仍然是引用傳遞),而copy.deepcopy屬於深拷貝,對list所有子元素都進行深拷貝。 python 引數傳遞 Python 引數傳遞
python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...
python 引數傳遞 python引數傳遞
python中函式引數的傳遞是通過 賦值 來傳遞的。但這條規則只回答了函式引數傳遞的 戰略問題 並沒有回答 戰術問題 也就說沒有回答怎麼賦值的問題。函式引數的使用可以分為兩個方面,一是函式引數如何定義,二是函式在呼叫時的引數如何解析的。而後者又是由前者決定的。函式引數的定義有四種形式 1.f arg...
python變數傳遞 Python引數傳遞
在 python 中,型別屬於物件,變數是沒有型別的 a 1,2,3 a runoob 以上 中,1,2,3 是 list 型別,runoob 是 string 型別,而變數 a 是沒有型別,她僅僅是乙個物件的引用 乙個指標 可以是指向 list 型別物件,也可以是指向 string 型別物件。可更...