前言
为了方便使用,我们常希望函数接口更为灵活,既有简便的默认参数,还有方便扩充的可变参数,关键字参数等等,下面我们具体介绍这些函数传参的使用方法。
1. 常规参数
python中,函数的传参是一个很简单的过程,如:
1 | def test(A,B,C): |
上面我给出的例子中,A,B是两个正常的参数,可能是常数,也可能是列表/元组,而C则是一个类或者函数,当然,在python中函数也是一个实例,所以可以作为参数。上面函数的使用方法可以是:
1 | z = test(1,2,func) |
上面的用法说明,函数的传参过程中,对于没有关键字的参数,会按照函数定义的参数顺序进行读取,有关键字的则会匹配赋值,从而实现函数传参。而返回值则会将return
后面的部分以tuple
的方式返回,如果return
后为空,则返回None
,上面的z
就是一个tuple
,而x
和y
则分别表示tuple
内的两个元素。
2. 默认参数
有时候函数的参数很多,而在某些场景下,很多参数都是一样的,所以我们希望能够将参数固定,需要改变的时候再传入,因而就有了默认参数
,默认参数很好理解:
1 | def test(A = 1, B = 2, C = func1): |
对于这种情况,我们可以有下面几种使用方式:
1 | test() |
以上方式使得函数传参更为方便了,然而默认参数的设定要注意的是,必须在非默认参数后面,即:
1 | def test(A, B, C=func) √ |
3. 可变参数
除了上面的基本功能之外,python还提供了更加方便的参数工具,当我们不知道我们要使用的参数数量的时候,可以利用python的*
进行设计:
1 | def test(A, *args): |
上面的*args
参数允许我们传入无限制的参数,如:
1 | input: |
说明,*
会将我们传入的参数打包为tuple
传入,但是这就存在一个问题,如果我们想在程序内部使用的话,传入多个参数也是一个问题,这里实际上*
还具有一个功能,那就是解包,如:
1 | x = [1,2,3] |
这样的话我们就可利用列表或者元组实现多参数传入~
4.关键字参数
上面介绍的*
可变参数不具有关键字,因此,在有些时候也不能实现我们想要的功能,如:一个数据表中,表的变量数不定,我们需要传入每个变量的参数,还需要知道每个参数对应的变量名,因此就需要用到关键字可变参数**
:
1 | def test(**kwargs): |
用法如下:
1 | input: |
同样的,我们可以利用tuple
解包实现:
1 | input: |