python函數參數相關總結

python函數的定義比起別的語言要簡單的多,但是卻更加靈活,其中函數的參數可以分爲幾下幾類:

  1. 位置參數
  2. 默認參數
  3. 可變參數
  4. 關鍵字參數
  5. 命名關鍵字參數

位置參數

下面是一個 計算x的任意n次方 函數

def power(x,n):
    s = 1
    while n > 0:
        n = n -1
        s = s * x
    return s    

>>> power(5, 2) 
    25
>>> power(5, 3)
    125

可以看出power(x, n) 函數有兩個參數:x 和 n ,都是位置參數,調用函數時,傳入的兩個值需要按位置順序依次賦值給參數 x 和 n,如果少一個參數或者順序不對都會出錯。


默認參數

依舊是一個 計算x的任意n次方 函數

def power(x,n = 2):
    s = 1
    while n > 0:
        n = n -1
        s = s * x
    return s    

>>> power(5) 
    25
>>> power(5, 3)
    125

可以看到,這次函數只需要調用一個參數就可以執行,n會設定爲默認值。但對於n > 2 的情況,就必須明確地傳入n,比如power(5,3)

默認參數可以簡化函數的調用,設置默認參數時,要注意一下幾點:

  1. 必須參數在前,默認參數在後,否則python解釋器會報錯
  2. 如何設置默認參數 :
    當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就可以作爲默認參數。使用默認參數最大的好處是能降低調用函數的難度。
  3. 有多個默認參數時,調用的時候,既可以按順序提供默認參數,也可以不按順序提供部分默認參數。
    當不按順序提供部分默認參數時,需要把參數名寫上。比如調用 XXX(‘arg1’, ‘arg2’, ‘arg3’=’xxx’),意思是,arg3參數用傳進去的值,其他默認參數繼續使用默認值。

定義默認參數要牢記一點:默認參數必須指向不變對象!


可變參數

你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長可變參數,聲明時不會命名。
加了星號(*)的變量名會存放所有未命名的變量參數。

# 可變參數說明
def printinfo( arg1, *vartuple ):
   "打印任何傳入的參數"
   print arg1
   for var in vartuple:
      print var
   return;

# 調用printinfo 函數
printinfo( 10 );  // 10
printinfo( 70, 60, 50 ); // 70 60 50

關鍵字參數

可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。

請看示例:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

# 調用該函數時,可以只傳入必選參數:
>>> person('Michael', 30)
name: Michael age: 30 other: {}

# 也可以傳入任意個數的關鍵字參數:
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}

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

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


命名關鍵字參數

如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收city和job作爲關鍵字參數。這種方式定義的函數如下:

def person(name, age, *, city, job):
    print(name, age, city, job)

# 調用方式如下
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符後面的參數被視爲命名關鍵字參數。

如果函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就不再需要一個特殊分隔符*了:

def person(name, age, *args, city, job):
    print(name, age, args, city, job)

本文參照廖雪峯老師python教程,參考原文請點擊此處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章