Python 函數的參數傳遞


C/C++中,傳遞參數的類型是可以指定的。一般來說,傳遞參數可以分為兩種:值傳遞和引用傳遞。對於值傳遞,參數傳遞的過程中進行了復制操作,也就是說,在函數中對參數的任何改動都不會影響到傳入的變量;對於引用傳遞,函數中的對象與傳入的對象其實是同一個對象,也就是說,參數僅僅是原對象的一個引用。一般來說,C/C++默認的方式都是值傳遞,要改變原對象,可采用顯式的引用或者指針傳遞的方式。

那么,在Python中呢?Python語言中顯然沒有能指定傳遞類型的語法,畢竟是一門動態的解釋型語言,也沒有顯式的類型要求。

下面驗證Python函數參數傳遞的方式:

def changelist(lst): #修改列表
    lst[0] = '1'
lst = [111, 2, 3, 4]
changelist(lst)
print lst
def changedict(dic): #修改字典
    dic["lustar"] ="yes"
dict1 = {"lustar": "no"}
changedict(dict1)
print dict1

輸出結果為:

['1', 2, 3, 4]
{'lustar': 'yes'}

可見,對於列表和字典,參數傳遞的方式是引用傳遞。

def changestring(string1): #修改字符串
    string1 += "None"
str1 = "I am a good boy!"
changestring(str1)
print str1
def changevar(a): #修改變量
    a += 111
b = 1
changevar(b)
print b

輸出結果為:

I am a good boy!
1

可見,對於字符串以及一般的變量,結果類似於值傳遞,並不會影響到原結果。那么,如果想改變字符串的值呢?返回新的字符串即可:

def changestring(string1):
    string1 += "None"
    return string1 #修改后的參數作為返回值
str1 = "I am a good boy!"
print id(str1)
str1 = changestring(str1)
print str1
print id(str1)

輸出結果為:

31869336
I am a good boy!None
31867712

可見,這時的字符串已經不是在原來的基礎上修改了,實際上是返回了一個新字符串。

結論

對於可以修改的對象,如列表和字典,函數的參數傳遞方式是引用傳遞。

對於不能修改的對象,包括字符串、一般變量和元組(元組本來就不能修改),參數傳遞的方式是值傳遞。如果確實需要修改該對象的值,可以利用函數的返回值進行修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM