Python學習13.02:Python函數值傳遞和引用傳遞(包括形式參數和實際參數的區別)

一般狀況下,定義函數時都會選擇有參數的函數形式,函數參數的做用是傳遞數據給函數,令其對接收的數據作具體的操做處理。

在使用函數時,常常會用到形式參數(簡稱「形參」)和實際參數(簡稱「實參」),兩者都叫參數,之間的區別是:html

  • 形式參數:在定義函數時,函數名後面括號中的參數就是形式參數,例如:
  • #定義函數時,這裏的函數參數 obj 就是形式參數
    def demo(obj)
    
        print(obj)

     

  • 實際參數:在調用函數時,函數名後面括號中的參數稱爲實際參數,也就是函數的調用者給函數的參數。例如:  
  • a = "C語言中文網"
    # 調用已經定義好的 demo 函數,此時傳入的函數參數 a 就是實際參數
    demo(a)

    實參和形參的區別,就如同劇本選主角,劇本中的角色至關於形參,而演角色的演員就至關於實參。python


明白了什麼是形參和實參後,再來想一個問題,那就是實參是如何傳遞給形參的呢?
Python 中,根據實際參數的類型不一樣,函數參數的傳遞方式可分爲 2 種,分別爲值傳遞引用(地址)傳遞函數

  1. 值傳遞:適用於實參類型爲不可變類型(字符串、數字、元組);
  2. 引用(地址)傳遞:適用於實參類型爲可變類型(列表,字典);

值傳遞和引用傳遞的區別是,函數參數進行值傳遞後,若形參的值發生改變,不會影響實參的值;而函數參數繼續引用傳遞後,改變形參的值,實參的值也會一同改變。
例如,定義一個名爲 demo 的函數,分別爲傳入一個字符串類型的變量(表明值傳遞)和列表類型的變量(表明引用傳遞):spa

def demo(obj) :
    obj += obj
    print("形參值爲:",obj)

print("-------值傳遞-----")
a = "C語言中文網"
print("a的值爲:",a)
demo(a)
print("實參值爲:",a)
print("-----引用傳遞-----")
a = [1,2,3]
print("a的值爲:",a)
demo(a)
print("實參值爲:",a)

運行結果爲:.net

-------值傳遞-----
a的值爲: C語言中文網
形參值爲: C語言中文網C語言中文網
實參值爲: C語言中文網
-----引用傳遞-----
a的值爲: [1, 2, 3]
形參值爲: [1, 2, 3, 1, 2, 3]
實參值爲: [1, 2, 3, 1, 2, 3]

分析運行結果不難看出,在執行值傳遞時,改變形式參數的值,實際參數並不會發生改變;而在進行引用傳遞時,改變形式參數的值,實際參數也會發生一樣的改變。code

對於初學者來講,本節只須要了解形參和實參,值傳遞和引用傳遞的區別便可。對於函數參數的傳遞方法,若是讀者想深刻探究其緣由,可閱讀《Python函數參數傳遞機制》一節。htm

相關文章
相關標籤/搜索