可变参数
print('a','b','c') #print可以接收无限个参数
那么系统内置的print()方法是如何实现接收多参的呢?
语法:
在参数名前面加个*
,python会认为它是一个可变参数。 python会把参数列表中的所有参数放入一个tuple中
def func(*param):
pass
测试:
# () []
def demo(*param):
print(param)
print(type(param))
demo(1,2,3,4,5,6,7)
(1, 2, 3, 4, 5, 6, 7)
<class 'tuple'>
如果你不喜欢这种语法,那么你也可以手动传入一个
def demo1(param):
print(param)
demo1(1,2,3,4,5,6,7)
发现报错了
demo1(1,2,3,4,5,6,7)
TypeError: demo1() takes 1 positional argument but 7 were given
demo1((1,2,3,4,5,6,7))
demo1([1,2,3,4,5,6,7])
(1, 2, 3, 4, 5, 6, 7)
[1, 2, 3, 4, 5, 6, 7]
再看一个demo
def demo(*param):
print(param)
print(type(param))
a = (1,2,3,4)
demo(1,2,3,4)
demo((1,2,3,4)) # 二维元组
demo(a) # 二维元组
demo(*a) # *作用拆包,拆出一个个元素放入param中,相当于golang、前端的 arr...
(1, 2, 3, 4)
<class 'tuple'>
((1, 2, 3, 4),)
<class 'tuple'>
((1, 2, 3, 4),)
<class 'tuple'>
(1, 2, 3, 4)
<class 'tuple'>
三种参数混合
def demo(param1,param2=2,*param):
print(param1)
print(param2)
print(param)
a = (1,2,3,4,5,6)
demo(*a)
1
2
(3, 4, 5, 6)
demo('a',1,2,3,4,5)
a
1
(2, 3, 4, 5)
如何把1,2,3,4,5
传给可变参数param
呢?
我们尝试把默认参数放到最后面
def demo(param1,*param,param2=2):
print(param1)
print(param)
print(param2)
demo('a',1,2,3,4,'param')
a
(1, 2, 3, 4, 'param')
2
还是没有达到我们的目的
我们显示指定默认参数呢?可以看到,达到了我们的预期
def demo(param1,*param,param2=2):
print(param1)
print(param)
print(param2)
demo('a',1,2,3,4,param2='param')
a
(1, 2, 3, 4)
param
总结: python遇到可变参数,会把该位置后面的所有参数都打包到可变参数中