Python中函式引數傳遞問題

2022-04-19 21:11:11 字數 1897 閱讀 5043

先上兩個例子:

a = 1

deffun(a):

a = 2fun(a)

print a #

結果為1

fun(a)中的a,可以看做函式中的形參,可以用任何字元代替:fun(aaa)

a =

deffun(a):

fun(a)

print a #

結果為 [1]

所有的變數都可以理解是記憶體中乙個物件的「引用」,或者,也可以看似c中void*的感覺。

這裡記住的是型別是屬於物件的,而不是變數。而物件有兩種,「可更改」(mutable)與「不可更改」(immutable)物件。在python中,strings, tuples, 和numbers是不可更改的物件,而list,dict等則是可以修改的物件。(這就是這個問題的重點)

當乙個引用傳遞給函式的時候,函式自動複製乙份引用,這個函式裡的引用和外邊的引用沒有半毛關係了.所以第乙個例子裡函式把引用指向了乙個不可變物件,當函式返回的時候,外面的引用沒半毛感覺.而第二個例子就不一樣了,函式內的引用指向的是可變物件,對它的操作就和定位了指標位址一樣,在記憶體裡進行修改.

看下面幾個例子:

>>> def

modifier(number,string,list):

number = 5string = '

goodbye

'list = [4,5,6]

print

"inside:

", number,string,list

>>> num = 10

>>> string = '

hello

'>>> list = [1,2,3]

>>> print

'before:

', num, string, list

before: 10 hello [1, 2, 3]

>>>modifier(num,string,list)

inside: 5 goodbye [4, 5, 6]

>>> print

'after:

', num, string, list

after: 10 hello [1, 2, 3]

>>> def

modifier(list,dict):

list[0] = 10dict['a

'] = 10

print

'inside list = %s, dict = %s

' %(list,dict)

>>> dict =

>>> list = [1,2,3,4,5]

>>> print

'before list = %s, dict = %s

' %(list,dict)

before list = [1, 2, 3, 4, 5], dict =

>>>modifier(list,dict)

inside list = [10, 2, 3, 4, 5], dict =

>>> print

'after list = %s, dict = %s

' %(list,dict)

after list = [10, 2, 3, 4, 5], dict =

>>> def

swap(list):

temp =list[0]

list[0] = list[1]

list[1] =temp

>>> list = [10,20]

>>>list

[10, 20]

>>>swap(list)

>>>list

[20, 10]

dd

Python中函式引數的傳遞

python中函式引數的傳遞是通過 賦值 來傳遞的。但這條規則只回答了函式引數傳遞的 戰略問題 並沒有回答 戰術問題 也就說沒有回答怎麼賦值的問題。函式引數的使用可以分為兩個方面,一是函式引數如何定義,二是函式在呼叫時的引數如何解析的。而後者又是由前者決定的。函式引數的定義有四種形式 1.f arg...

python中函式引數的傳遞

實際引數按照前後順序依次賦值給形式引數。def party area,person print 晚上聚會 print 地點 area print 參與人員 person print 有了酒,就有了故事.party 皇家一號 全體人員 函式宣告定義時,可以給某個引數設定預設資料,在呼叫執行時 有預設資...

Python函式中的引數傳遞

函式的引數 1 函式的引數是可選的 2 函式需要處理的資料應該通過引數來傳遞 3 函式名後面括號裡的引數被稱為形參,由於它不是實際存在的引數所以又稱虛擬引數 4 呼叫函式時後面括號裡的引數稱為實參 def create fib n fib list 0 1 for i in range n 2 re...