大类只有2种,虚参和传参。可以同时使用,如下:
def star(*l, **d):
print(l)
print(d)
star(*(1,2,3,4),**{'a':1})
# out:
# (1, 2, 3, 4)
# {'a': 1}
但没怎么看到过。一切脱离实用意义的炫技都是小丑。接下来解释:
- 1.虚参:函数定义的时候使用 。*arg代表按照位置索引接收参数,汇聚成一个tuple;**args代表按照关键词索引接收参数,汇聚成一个dictionary。
当不确定会进来几个参数的时候使用。
def star(*l, **d):
print(l)
print(d)
star(1,2,3,a=4)
# out:
# (1, 2, 3)
# {'a': 4}
# 1 2 3因为没有关键词,全部被当成位置索引,被吸收到*l参数,l变成了一个tuple。
# 4因为有关键词a,被当成关键词索引,被吸收到**d参数,d变成了一个dictionary。
-
- 传参:调用函数时的时候使用,*配合(),用来按照位置索引分配函数值;**配合{},用来按照关键词索引分配函数值。
当需要让多个函数值分散排队的时候使用。
- 传参:调用函数时的时候使用,*配合(),用来按照位置索引分配函数值;**配合{},用来按照关键词索引分配函数值。
单*号,2个用法:
def star(a, b):
print(a)
print(b)
star(*(1,2))
# out:
# 1
# 2
# star(*(1,2)) 等价于 star(1,2)
def star(*l):
print(l)
star(*(1 for _ in range(2))
# out:
# (1, 1)
# star(*(1 for _ in range(2)) 等价于 star(1,1),也就是说*(1 for _ in range(2))等价于 1,1
双*号:
def star(a, b):
print(a)
print(b)
star(**{'a':1,'b':2})
# out:
# 1
# 2
# star(**{'a':1,'b':2}) 等价于 star(a=1,b=2)