Python 不定長引數-關於*號和**號
阿新 • • 發佈:2020-11-29
你可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數
加了星號*的引數會以元組(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 >>>