本文目錄一覽:
Python 的函數是怎麼傳遞參數的
Python 的函數傳遞參數:
Python 傳參數可以理解為 C 的 const 指針(your_type* const your_variable),它所指向的對象可以被修改產生副作用,但變數本身不能修改指向其他對象。這個和 C++ 的 reference 差不多。
所以如果一定要產生 C 的修改指針指向其他對象的效果,用 list、dict 或其他自定義的 mutable 對象包裝是一個辦法,但我認為這樣是一種不良實踐。在 C 語言中用參數輸出結果有非常多的理由:
C 語言沒有 tuple,不能返回多值,除非聲明一個 struct 類型。這種情況下劃分 in 參數和 out 參數成為一種慣例
C 語言沒有異常機制,返回值一般要保留給 errno
但這些情況在 Python 中都是不存在的
python怎麼給函數傳參
函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通信的方法問題。基本的參數傳遞機制有兩
種:值傳遞和引用傳遞。
推薦:Python教程
值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變數處理,即在堆棧中開闢了內存空間以存放由主調函數放
進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變數進行,不會影響主調函
數的實參變數的值。
引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變數在堆棧中開闢了內存空間,但是這時存放的是由主調函
數放進來的實參變數的地址。被調函數對形參的任何操作都被處理成間接定址,即通過堆棧中存放的地址訪問主調函數中的實參變數。正
因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變數。
更多技術請關注Python視頻教程。
Python中函數參數傳遞問題
對於可變參數默認是引用傳值, 但是不能去修改它的指向, 一旦修改就是按值傳遞.
# coding=utf-8
def f(a):
a = [0]
print(a)
if __name__ == ‘__main__’:
a = [1, 2, 3]
f(a)
print(a)
上面的代碼對a重新賦值, 試圖改變a的指向, 那麼這時的a就是一個新的局部變數, 而非全局變數a
像a[0] = 100, a.append(0)的操作不會觸發上述規則, 和你的輸出一樣
Python 的函數是怎麼傳遞參數的?
首先你要明白,Python的函數傳遞方式是賦值,而賦值是通過建立變數與對象的關聯實現的。
對於你的代碼:
執行 d = 2時,你在__main__里創建了d,並讓它指向2這個整型對象。
執行函數add(d)過程中:
d被傳遞給add()函數後,在函數內部,num也指向了__main__中的2
但執行num = num + 10之後,新建了對象12,並讓num指向了這個新對象——12。
如果你明白函數中的局部變數與__main__中變數的區別,那麼很顯然,在__main__中,d仍在指著2這個對象,它沒有改變。因此,你列印d時得到了2。
如果你想讓輸出為12,最簡潔的辦法是:
在函數add()里增加return num
調用函數時使用d = add(d)
代碼如下:
def add(num):
num += 10
return num
d = 2
d = add(d)
print d
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151479.html