python參數傳遞方式

原文地址:http://www.cnblogs.com/zhaopengcheng/p/5492183.htmlhtml

python中一切皆對象,函數中參數傳遞的是對象的引用。python

1在函數中改變變量指向的對象,即指向不一樣對象。ide

當在函數中修改傳遞進來的變量指向另外一個對象時,實參的對象不會改變。函數

複製代碼
>>> def fun(num,l,d):
...     num=123;
...     l=[1,2,3]
...     d={'a':123}
...     print("inside:","num=%f,l=%s,d=%s"%(num,l,d))
... 
>>> num=1
>>> l=[1,1,1]
>>> d={'nice':111}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=1.000000,l=[1, 1, 1],d={'nice': 111}
>>> fun(num,l,d)
inside: num=123.000000,l=[1, 2, 3],d={'a': 123}
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=1.000000,l=[1, 1, 1],d={'nice': 111}
複製代碼

須要說明的是:函數內部的num,l,d和命令行裏的num,l,d是不一樣的變量,只是名字相同。函數內部的是形參,命令行裏的是實參。spa

2修改傳遞進來對象的內容,即不是讓形參指向不一樣對象,而是經過引用修改對象內容。固然這個對象必須是可變的。命令行

複製代碼
>>> def fun2(num1,l1,d1):
...     num1=123
...     l1[0]=123
...     d1['a']=123
...     print("inside:","num1=%f,l1=%s,d1=%s"%(num1,l1,d1))
... 
>>> num=111
>>> l=[1,1,1]
>>> d={'a':111,'b':0}
>>> print("before:","num=%f,l=%s,d=%s"%(num,l,d))
before: num=111.000000,l=[1, 1, 1],d={'a': 111, 'b': 0}
>>> fun2(num,l,d)
inside: num1=123.000000,l1=[123, 1, 1],d1={'a': 123, 'b': 0}
>>> print("after:","num=%f,l=%s,d=%s"%(num,l,d))
after: num=111.000000,l=[123, 1, 1],d={'a': 123, 'b': 0}
複製代碼

小結:python中一切皆對象,函數中傳遞的是對象的引用,當形參指向了不一樣對象,實參不會改變;當形參經過傳遞來的引用修改了對象的內容,實參會跟着改變,由於形參和實參指向的是同一個對象。其中不只是函數參數的傳遞是這樣,在函數內部也是這樣。當一個變量向另外一個變量賦值時,給的是對象的引用,這個對象的引用,感受至關於c語言中變量的地址,只是在python中,這個地址變量是通用的,能夠指向任意類型,當你改變了這個地址,至關與python中指向了不一樣對象,原來變量的地址沒有改變,因此原來變量指向的地址的內容沒有改變。當你經過這個地址改變了地址裏面的內容時,原來變量指向的地址的內容也會跟着改變。code

相關文章
相關標籤/搜索