Python 是一門非常受歡迎的編程語言,其函數參數傳遞機制也備受關注。其中,按值傳遞(pass by value)是較為常見的一種傳遞方式。
def test(num): num += 1 print(num) a = 1 test(a) print(a)
上述代碼中,我們定義了一個 test() 函數,該函數的參數為 num,隨后我們將參數值加 1 并打印結果。接下來我們定義變量 a,并將其賦值為 1。然后我們調用 test(a) 函數來修改 a 的值,并且打印相應的結果。
當我們運行這段程序時,我們會發現函數內部的值會自動加 1,但是函數外部的 a 的值并沒有發生改變。這是因為Python 的參數傳遞是按值傳遞的。
換句話說,Python 函數內部對參數值的修改不會影響函數外部的變量,因為Python將參數值的副本傳遞給了函數。如果函數內部對參數值做出了修改,實際上只是修改了參數值的副本,而不會影響到函數外部的變量。
值得注意的是,Python 中的按值傳遞和按引用傳遞(pass by reference)有所不同。在按引用傳遞中,函數參數指向的是同一存儲地址。這意味著,函數內部對參數值的修改會影響到函數外部的變量。
def test(lst): lst.append(3) print(lst) l = [1, 2] test(l) print(l)
上述代碼中,我們定義了一個 test() 函數,該函數的參數為 lst,隨后我們向 lst 列表中添加了一個值為 3 的元素。接下來我們定義列表變量 l,并將其賦值為 [1, 2]。然后我們調用 test(l) 函數來修改 l 的值,并且打印相應的結果。
當我們運行這段程序時,我們會發現函數內部的 lst 列表會自動添加一個值為 3 的元素,且函數外部的 l 的值也隨之改變。這是因為 Python 中的列表屬于可變類型(mutable),而函數傳遞的是引用(reference)而非副本。
總之,Python中的參數傳遞機制是按值傳遞的,但這并不意味著函數內部不能修改函數外部的變量。Python中傳遞的是值的副本,對于可變類型的參數,因為其具有 reference,所以也會修改函數外部的變量,從而產生一些奇特的效果。