首先還是應(yīng)該科普下函數(shù)參數(shù)傳遞機制,傳值和傳引用是什么意思?
函數(shù)參數(shù)傳遞機制問題在本質(zhì)上是調(diào)用函數(shù)(過程)和被調(diào)用函數(shù)(過程)在調(diào)用發(fā)生時進行通信的方法問題。基本的參數(shù)傳遞機制有兩種:值傳遞和引用傳遞。
值傳遞(passl-by-value)過程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,即在堆棧中開辟了內(nèi)存空間以存放由主調(diào)函數(shù)放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調(diào)函數(shù)對形式參數(shù)的任何操作都是作為局部變量進行,不會影響主調(diào)函數(shù)的實參變量的值。
引用傳遞(pass-by-reference)過程中,被調(diào)函數(shù)的形式參數(shù)雖然也作為局部變量在堆棧中開辟了內(nèi)存空間,但是這時存放的是由主調(diào)函數(shù)放進來的實參變量的地址。被調(diào)函數(shù)對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調(diào)函數(shù)中的實參變量。正因為如此,被調(diào)函數(shù)對形參做的任何操作都影響了主調(diào)函數(shù)中的實參變量。
在python中實際又是怎么樣的呢?
>>先看一個簡單的例子:
fromctypesimport*
importos.path
importsys
deftest(c):
print"testbefore"
printid(c)
c+=2
print"testafter+"
printid(c)
returnc
defprintIt(t):
foriinrange(len(t)):
printt[i]
if__name__=="__main__":
a=2
print"mainbeforeinvoketest"
printid(a)
n=test(a)
print"mainafterfinvoketest"
printa
printid(a)
運行后結(jié)果如下:
>>>
mainbeforeinvoketest
39601564
testbefore
39601564
testafter+
39601540
mainafterfinvoketest
2
39601564
以上內(nèi)容為大家介紹了python培訓(xùn)之怎么傳參數(shù),希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。