目录
前言
一、必传参数
二、默认参数
三、可变参数
总结
在python函数中有三种参数,分别是必传参数、默认参数和可变参数,下面将分别介绍这三种参数和相应的用法。
在python函数定义中,有些参数是必须要传入的,如果不传入那么程序就会报错,就像下面这样:
def add(a, b):
return a + b
result = add()
print(result)
>>add() missing 2 required positional arguments: 'a' and 'b'
报错信息是“缺少两个位置参数”,其实位置参数就是必传参数,我们给相应的参数传入,这样就不会报错了。
def add(a, b):
return a + b
result = add(a = 1, b = 2)
print(f'result = {result}')
>>result = 3
def add(a, b = 2):
return a + b
result = add(a = 1)
>>result = 3
请看上面的代码,函数传入了两个参数,其中一个参数b给了初始值,下面我们调用函数时,对给了初始值的参数b并不需要传值进去,当然你是可以继续传值进去的,那么b将按照你传入的值进行赋予。
def add(a, b = 2):
return a + b
result = add(a = 1, b = 3)
print(f'result = {result}')
>>result = 4
现在请思考一个问题,假如我们函数定义中有10个,或者更多的参数需要传入,那么我们是不是还是按照下面这样的方式呢?
def test(a, b, c, d, e, f, g, h, i.....):
......
答案显然是不会采用这种方式传参,这样看着就不简洁而且效率也低,那么python函数定义中有一种可变参数的传参,这样的传参方式既简洁又高效。
def test(*args, **kwargs):
......
上述程序中,
*args:将无参数的值合并成元组
*kwargs:将有参数与默认值的赋值语句合并成字典
看着有点抽象,我们看个具体的例子就能很好理解了,
def test(*args, **kwargs):
print(args)
print(kwargs)
test(1, 2, 3, city = 'shanghai')
>>(1, 2, 3)
>>{'city' : 'shanghai'}
上面的操作有时候也会叫做打包。有一点需要注意,那就是*args和**kwargs的相对位置不能变,如果改变位置的话,那就会报错了。
def test(**kwargs, *args):
print(args)
print(kwargs)
test(1, 2, 3, city = 'shanghai')
>>SyntaxError: invalid syntax
当然我们也能直接传元组参数和字典参数的,这个又称为解包,
def test(*args, **kwargs):
print(args)
print(kwargs)
a_ = (1, 2)
b_ = {'city' : 'shanghai'}
test(*a_, **b_)
>>(1, 2)
>>{'city' : 'shanghai'}
当然当然,传参的相对位置也是不能变的,不然也是会报错的吖。
参数之间还有很多种排列顺序,如果大家感兴趣可以排列组合编辑一遍,看哪些会报错哪些不会报错。