python引數傳遞小記

2021-10-02 14:38:07 字數 1835 閱讀 9744

常用的引數傳遞分為值傳遞(對應形參)和引用傳遞(對應實參),形參和實參的一大區別就是改變形參原引數物件不會改變,而實參則會。

參考材料:

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 型別物件。可更...