1. 程式人生 > 實用技巧 >Python 不定長引數-關於*號和**號

Python 不定長引數-關於*號和**號

你可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數

加了星號*的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。

#!/usr/bin/python3
  
# 可寫函式說明
def printinfo( arg1, *vartuple ):
   "列印任何傳入的引數"
   print ("輸出: ")
   print (arg1)
   print (vartuple)
 
# 呼叫printinfo 函式
printinfo( 70, 60, 50 )

以上例項輸出結果:

輸出: 
70
(60, 50)

如果在函式呼叫時沒有指定引數,它就是一個空元組。我們也可以不向函式傳遞未命名的變數。如下例項:

#!/usr/bin/python3
 
# 可寫函式說明
def printinfo( arg1, *vartuple ):
   "列印任何傳入的引數"
   print ("輸出: ")
   print (arg1)
   for var in vartuple:
      print (var)
   return
 
# 呼叫printinfo 函式
printinfo( 10 )
printinfo( 70, 60, 50 )

以上例項輸出結果:

輸出:
10
輸出:
70
60
50

還有一種就是引數帶兩個星號 ,加了兩個星號**的引數會以字典的形式匯入。

#!/usr/bin/python3
# 可寫函式說明 def printinfo( arg1, **vardict ): "列印任何傳入的引數" print ("輸出: ") print (arg1) print (vardict) # 呼叫printinfo 函式 printinfo(1, a=2,b=3)

以上例項輸出結果:

輸出: 
1
{'a': 2, 'b': 3}

宣告函式時,引數中星號*可以單獨出現,例如:

def f(a,b,*,c):
    return a+b+c

如果單獨出現星號*後的引數必須用關鍵字傳入。

>>> def f(a,b,*,c):
...     
return a+b+c ... >>> f(1,2,3) # 報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6 >>>