一、*的独立使用
def test(a,b,*,x,y):
print(a,b,x,y)
test(1,2,x=3,y=4)
#1 2 3 4
* 后的参数在调用时必须以key=value的形式进行传递,* 前的参数在调用时的可使用key=value的形式进行传递,也可不用key=value的形式进行传递。
def test(a,b,*,x,y):
print(a,b,x,y)
test(x=3,a=1,b=2,y=4)
#1 2 3 4
如果参数全用key=value的形式进行传递,则可以打乱传入顺序。
二、*后面跟字母
def add(*args): print(args) print(type(args)) sum = 0 for i in range(len(args)): sum += args[i] print(sum) add(1,2,3) # (1, 2, 3) <class 'tuple'> 6 add() # () <class 'tuple'> 0
*后面跟字母(默认用*args表示),表示这是一个tuple参数,tuple中的元素个数不做限制。tuple中的元素类型尽量保持一致。
三、**后面跟字母
**后面跟字母(默认用**kwargs表示),表示这是一个dict参数,dict中的元素个数不做限制,需要使用key=value的形式进行传入参数。
def test_kw(**kwargs): print(kwargs) print(type(kwargs)) for k,v in kwargs.items(): print(k,':',v) test_kw(a=1,b=2,c=3,d=4) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} # <class 'dict'> # a:1 b:2 c:3 d:4 test_kw(a=1,b=2,c=3,d=4,x=999) # {'a':1, 'b':2, 'c':3, 'd':4, 'x':999} # <class 'dict'> # a:1 b:2 c:3 d:4 x:999 test_kw() # {} <class 'dict'>
参考/转载:
https://www.pynote.net/archives/368
https://www.pynote.net/archives/534