一般函數的參數個數都是固定的,但如果遇到參數數量不固定的狀況,通常會將某些參數填上預設值,在 python function 可以支援兩種可變數量的參數 *args
和 **kwargs
。
以下例子中的 fun 雖然定義了三個參數,但是後面兩個填上預設值,呼叫該函數時,就可以忽略 b 與 c,直接使用預設值。
def fun(a,b=2,c=3):
print("a={}, b={}, c={}".format(a,b,c))
fun(1)
fun(1,22,33)
執行結果
a=1, b=2, c=3
a=1, b=22, c=33
*args
是可變的positional arguments列表,**kwargs
是可變的keyword arguments列表。兩個可以同時使用,但在使用時,*args
必須在**kwargs
的前面,因為positional arguments,有位置順序的對應,必須位於keyword arguments之前。
以下的例子,是定義 fun 有一個必要參數 a,以及可變的 *args
def fun(a, *args):
print("a={}".format(a))
for arg in args:
print('Optional argument: {}'.format( arg ) )
fun(1,22,33)
執行結果為
a=1
Optional argument: 22
Optional argument: 33
如果同時加上 **kwargs
def fun(a, *args, **kwargs):
print("a={}".format(a))
for arg in args:
print('Optional argument: {}'.format( arg ) )
for k, v in kwargs.items():
print('Optional kwargs argument key: {} value {}'.format(k, v))
fun(1,22,33, k1=44, k2=55)
執行結果為
a=1
Optional argument: 22
Optional argument: 33
Optional kwargs argument key: k1 value 44
Optional kwargs argument key: k2 value 55
除了在定義函數的部分,在呼叫函數時,也可以使用 *args
及 **kwargs
print("")
args = [1,2,3,4]
fun(*args)
print("")
kwargs = {'k1':10, 'k2':11}
fun(1, **kwargs)
print("")
fun(1, *args, **kwargs)
執行結果為
a=1
Optional argument: 2
Optional argument: 3
Optional argument: 4
a=1
Optional kwargs argument key: k1 value 10
Optional kwargs argument key: k2 value 11
a=1
Optional argument: 1
Optional argument: 2
Optional argument: 3
Optional argument: 4
Optional kwargs argument key: k1 value 10
Optional kwargs argument key: k2 value 11
References
Python定義的函數(或調用)中參數args 和*kwargs的用法
沒有留言:
張貼留言