跟著廖老師學Python(13):函數(shù)3 - 函數(shù)的參數(shù)

續(xù):第(11)節(jié)
本文所有引用均來自廖雪峰老師的網(wǎng)站。轉載請說明出處。


  1. 默認參數(shù)
    def power(x, n=2):
    ……
    上面所示的'n=2'就是在傳入?yún)?shù)缺少參數(shù)n的時候默認的值。

    注意:必選參數(shù)在前,默認參數(shù)在后,否則Python的解釋器會報錯

  2. 可變參數(shù)
    ——傳入的參數(shù)個數(shù)是可變的。
    例如計算a2+b2+c^2+……

    • 傳統(tǒng)方法
      def calc(numbers):
      ……
      其中numbers是一個list或者tuple。調(diào)用的時候需要先組裝出一個list或者tuple:
      calc([1,2,3])

    • 可變參數(shù)
      def calc(*numbers):
      ……
      在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple,因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù),包括0個參數(shù)。

  • 當然如果定義了一個list或者tuple,也可以這樣:
    >>> nums = [1, 2, 3]
    >>> calc(nums[0], nums[1], nums[2])

    • 上面這種寫法太繁瑣,Python允許直接在list或tuple前面加一個*號,把list或tuple的元素變成可變參數(shù)傳進去:
      >>> nums = [1, 2, 3]
      >>> calc(*nums)
      *nums表示把nums這個list的所有元素作為可變參數(shù)傳進去。這種寫法相當有用,而且很常見。
  1. 關鍵字參數(shù)
    關鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict。
    def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw) //kw==keyword

    >>>person('Michael', 30)
    name: Michael age: 30 other: {}
    
    >>> person('Adam', 45, gender='M', job='Engineer')
    name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
    

關鍵字參數(shù)有什么用?它可以擴展函數(shù)的功能。比如,在person函數(shù)里,我們保證能接收到name和age這兩個參數(shù),但是,如果調(diào)用者愿意提供更多的參數(shù),我們也能收到。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

和可變參數(shù)類似,也可以先組裝出一個dict,然后,把該dict轉換為關鍵字參數(shù)傳進去:

d
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

上面寫法可以簡化:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

**extra表示把extra這個dict的所有key-value用關鍵字參數(shù)傳入到函數(shù)的**kw參數(shù),kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝,對kw的改動不會影響到函數(shù)外的extra。

4.參數(shù)組合

在Python中定義函數(shù),可以用必選參數(shù)、默認參數(shù)、可變參數(shù)、關鍵字參數(shù)和命名關鍵字參數(shù),這5種參數(shù)都可以組合使用。但是請注意,參數(shù)定義的順序必須是:必選參數(shù)、默認參數(shù)、可變參數(shù)、命名關鍵字參數(shù)和關鍵字參數(shù)。

對于任意函數(shù),都可以通過類似func(*args, **kw)的形式調(diào)用它,無論它的參數(shù)是如何定義的。

要注意定義可變參數(shù)和關鍵字參數(shù)的語法:
*args是可變參數(shù),args接收的是一個tuple;
**kw是關鍵字參數(shù),kw接收的是一個dict。

- end -

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容