* 乘号 **乘方
python传递参数有两种形式
普通参数 -> 默认参数 -> 收集参数 -> 命名关键字参数 -> 关键字收集参数
def func(a,b=2,*z,c,d,**kw)
a为普通参数,b是默认参数,z 是收集参数,c、d是命名关键字参数 ,kw是关键字收集参数
*args **args 用于函数定义
*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
def zhao(*args):
for i in args:
print(i,end=' ')
zhao(1,2,3)
# 1 2 3
def zhao(a,**args):
print(a)
print(args)
zhao(2,aa=4,b=6,c=7)
# 2
# {'aa': 4, 'b': 6, 'c': 7}
def zhao(a,**args):
print(a)
for i,j in args.items():
print(i,type(i),end=' ')
zhao(2,aa=4,b=6,c=7)
# 2
# aa b c
也可以选择性传参
def zhao(a,*b,**args):
print(a)
print(b)
print(args)
zhao(2,aa=4,b=6,c=7)
# 2
# ()
# {'aa': 4, 'b': 6, 'c': 7}
将元组(*)解包成位置参数,将字典(**)解包成关键字参数
def zhao(a,b,c):
print('a:',a,end=' ')
print('b:',b,end=' ')
print('c:',c)
args=(1,11,111)
zhao(*args)
# a: 1 b: 11 c: 111
def zhao(a,b,c):
print('a:',a,end=' ')
print('b:',b,end=' ')
print('c:',c)
args={'a':3,'b':2,'c':1}
zhao(**args)
# a: 3 b: 2 c: 1
注意:若解包字典时只用了一个 * ,则相当于使用了字典中的键而不是值
def zhao(a,b,c):
print('a:',a,end=' ')
print('b:',b,end=' ')
print('c:',c)
args={'a':3,'b':2,'c':1}
zhao(*args)
# a: a b: b c: c
当然也不限于元组和字典,也可以用于字符串,数组等序列
例如用于评委打分中去掉最高最低分的情景:
import random
score = [random.randrange(1,101) for i in range(10)]
score.sort()
print('评委打分:',score)
a,*b,c=score
print('去掉最高最低分后:',b)
# 评委打分: [11, 46, 54, 60, 65, 68, 73, 77, 92, 100]
# 去掉最高最低分后: [46, 54, 60, 65, 68, 73, 77, 92]
也可以解包为空
a, *b, c = 1, 2
print(a,b,c)
# 1 [] 2
嵌套解包
注意下例中 b 的值后者覆盖前者
(a,b),(c,b)=(1,2),(4,3)
print(a,b,c)
# 1 3 4
如何输出下图结果?
A ['B', 'C', 'D', 'E']
B ['C', 'D', 'E']
C ['D', 'E']
D ['E']
E []
s = 'ABCDE'
while s:
x, s = s[0], list(s[1:])
print(x, s)