1. 概述
在Python代码中,经常见到函数中有*args和**kwargs写法,它们都起到了可选参数(optional arguments)的作用。那么具体怎么使用呢?且看下文细细分解。
2. *和**
在了解*args和**kwargs的作用之前,首先要理解*和**在Python中的使用。*和**主要有三方面的用途,(一)是对可迭代对象进行拆分,(二)可变变量的赋值,(三)函数的可选参数标志。[1]
2.1 用于对可迭代对象进行拆分
在Python中,一切内置了__iter__方法的对象都是可迭代对象,典型的可迭代对象包括元组(tuple)、列表(list)、集合(set)、字典(dict)等等。这种拆解主要运用在函数的参数语境中,以print函数为例,以下5个表达式是完全等价的:
print("a", "b", "c")
print(*("a", "b", "c")) # 元组
print(*["a", "b", "c"]) # 列表
print(*{"a", "b", "c"}) # 集合
print(*{"a": 1, "b": 2, "c": 3}) # 注意:对字典拆解时只拆解key
print(*"abc") # 注意:字符串也是可迭代对象
输出结果完全一样:
a b c
a b c
a b c
a b c
a b c
a b c
除了函数参数语境,赋值语境下也可以对可迭代对象进行拆分,如
a = *range(3),
b