可变参数

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遇到可变参数,会把该位置后面的所有参数都打包到可变参数中

results matching ""

    No results matching ""