任意參數(shù) *
當(dāng)我們的函數(shù)接收參數(shù)為任意個(gè)顶别,或者不能確定參數(shù)個(gè)數(shù)時(shí),我們檩咱,可以利用*
來定義任意數(shù)目的參數(shù)揭措,這個(gè)函數(shù)調(diào)用時(shí),其所有不匹配的位置參數(shù)會(huì)被賦值為元組刻蚯,我們可以在函數(shù)利用循環(huán)或索引進(jìn)行使用
def f(*args):
# 直接打印元組參數(shù)
print(args)
print('-'*20)
# 循環(huán)打印元組參數(shù)
[print(i) for i in args]
...
# 傳遞一個(gè)參數(shù)
f(1)
print('='*20)
# 傳遞5個(gè)參數(shù)
f(1, 2, 3, 4, 5)
示例結(jié)果:
(1,)
--------------------
1
====================
(1, 2, 3, 4, 5)
--------------------
1
2
3
4
5
任意參數(shù) **
而**
是用于收集關(guān)鍵字參數(shù)并將這些參數(shù)傳遞給一個(gè)新的字典绊含,即在函數(shù)中我們可以利用處理字典的方式處理這些參數(shù)
def f(**args):
# 直接打印字典參數(shù)
print(args)
for key, value in args.items():
print('{}: {}'.format(key, value))
f(a=1)
print('='*20)
f(a=1, b=2, c=3)
示例結(jié)果:
{'a': 1}
a: 1
====================
{'a': 1, 'b': 2, 'c': 3}
a: 1
b: 2
c: 3
任意參數(shù)混合
我們可以混合一般參數(shù)、*
參數(shù)以及**
參數(shù)完成實(shí)現(xiàn)更加復(fù)雜的調(diào)用方式炊汹。
def f(a, *targs, **dargs):
print(a, targs, dargs)
f(1,2,3, x=1, y=2)
示例結(jié)果:
1 (2, 3) {'x': 1, 'y': 2}
可以看到這種調(diào)用方式并不那么直觀躬充,甚至有些“混淆視聽”,那么怎么在復(fù)雜任意參數(shù)的調(diào)用時(shí),是的在函數(shù)調(diào)用更加直觀明了充甚?
解包參數(shù)
我們可以在函數(shù)調(diào)用時(shí)以政,直接利用和*進(jìn)行參數(shù)傳遞,然后讓函數(shù)自動(dòng)解包伴找,也就類似之前的序列解包盈蛮,使用調(diào)用時(shí)更加的直觀。
def f(a, b, c, d):
print(a, b, c, d)
f(1, *(2, 3), **{'d': 4})
示例結(jié)果:
1 2 3 4