*args、**kwargs用法:
使用 *args、**kwargs可以傳遞多個參數
*args、**kwargs在Python中的代碼中經常會見到這兩個詞。 args 和 kwargs,前面通常還會加上一個或者兩個星號。其實這只是編程人員約定的變量名字,args 是 arguments 的縮寫,表示位置參數;kwargs 是 keyword arguments 的縮寫,表示關鍵字參數。這其實就是 Python 中可變參數的兩種形式,並且 *args 必須放在 **kwargs 的前面,因爲位置參數在關鍵字參數的前面。
def test_args(first, *args):
print("第一個必填參數的值:", first)
print(type(args))
for arg in args:
print("其餘可選參數的值:", arg)
def test_kwargs(first, *args, **kwargs):
print("第一個必填參數的值:", first)
print(type(kwargs))
for arg in args:
print("其餘可選參數的值: ", arg)
for k, v in kwargs.items():
print("可選且指定了名稱的參數:%s=%s" % (k, v))
if __name__ == '__main__':
test_args(0)
print()
test_args(1, 2, 3, 4)
print()
test_kwargs(0)
print()
# 錯誤使用,第一個參數已指定名稱,無法自定義
# test_kwargs(k0=1)
test_kwargs(0, k1=1)
print()
test_kwargs(1, 2, 3, 4, k1=5, k2=6)
print()
# **將字典展開爲參數
params = {'a': 11, 'b': 12, 'c': 13}
test_kwargs(0, **params)
"""
args: 以元祖的形式存放多個參數
kwargs:以字典的形式傳遞多個參數
"""
def fun1(*args):
print("args = ", args) # 存放了所有的參數
def fun2(x, *args):
print("x = ", x)
print("args = ", args) # 存放了除x外所有的參數
def fun3(x, y=1, *args):
print("x = ", x)
print("y = ", y)
print("args = ", args) # 存放了除x和y外所有的參數
def fun4(x, *args, y=1):
print("x = ", x)
print("y = ", y) # 保持默認值
print("args = ", args) # 存放了除參數x外的所有的參數
def fun5(**kwargs):
print("kwargs = ", kwargs) # 以字典格式存放了所有的參數
def fun6(x, **kwargs):
print("x = ", x)
print("kwargs = ", kwargs) # 以字典格式存放了除x外所有的參數
def fun7(x=1, **kwargs):
print("x = ", x)
print("kwargs = ", kwargs) # 以字典格式存放了所有的參數
def fun8(x, *args, **kwargs):
"""注意調用順序
"""
print("x = ", x)
print("args = ", args)
print("kwargs = ", kwargs) # 以字典格式存放了所有的參數
if __name__ == "__main__":
print("fun1 result:")
fun1(1, 2, 3, 4, 5)
print("fun2 result:")
fun2(1, 2, 3, 4, 5)
print("fun3 result:")
fun3(1, 2, 3, 4, 5)
print("fun4 result:")
fun4(1, 2, 3, 4, 5)
print("fun5 result:")
fun5(x1=1, x2=2, x3=3, x4=4, x5=5) # 調用時需要指定變量名
print("fun6 result:")
fun6(x=1, x2=2, x3=3, x4=4, x5=5) # 需要給定x的值
print("fun7 result:")
fun7(x1=1, x2=2, x3=3, x4=4, x5=5) # 可以不指定x的值(缺省值)
print("fun8 result:")
fun8(1, 2, 3, x1=1, x2=2, x3=3) # x=1, args=(2,3), kwargs={"x1": 1, "x2": 2, "x3": 3}