python中的函数传参


前言

为了方便使用,我们常希望函数接口更为灵活,既有简便的默认参数,还有方便扩充的可变参数,关键字参数等等,下面我们具体介绍这些函数传参的使用方法。

1. 常规参数

python中,函数的传参是一个很简单的过程,如:

1
2
def test(A,B,C):
return C(A),B(A)

上面我给出的例子中,A,B是两个正常的参数,可能是常数,也可能是列表/元组,而C则是一个或者函数,当然,在python中函数也是一个实例,所以可以作为参数。上面函数的使用方法可以是:

1
2
3
z = test(1,2,func)
or
x,y = test(1,2,C=func)

上面的用法说明,函数的传参过程中,对于没有关键字的参数,会按照函数定义的参数顺序进行读取,有关键字的则会匹配赋值,从而实现函数传参。而返回值则会将return后面的部分以tuple的方式返回,如果return后为空,则返回None,上面的z就是一个tuple,而xy则分别表示tuple内的两个元素。

2. 默认参数

有时候函数的参数很多,而在某些场景下,很多参数都是一样的,所以我们希望能够将参数固定,需要改变的时候再传入,因而就有了默认参数,默认参数很好理解:

1
2
def test(A = 1, B = 2, C = func1):
...

对于这种情况,我们可以有下面几种使用方式:

1
2
3
4
5
test()
or
test(A = 3)
or
test(1, C = func2)

以上方式使得函数传参更为方便了,然而默认参数的设定要注意的是,必须在非默认参数后面,即:

1
2
def test(A, B, C=func)
def test(A, B = 2, C) X

3. 可变参数

除了上面的基本功能之外,python还提供了更加方便的参数工具,当我们不知道我们要使用的参数数量的时候,可以利用python的*进行设计:

1
2
def test(A, *args):
print(str(A) + ':' + str(args))

上面的*args参数允许我们传入无限制的参数,如:

1
2
3
4
input:
test(1,2,3,4)
output:
1:(2,3,4)

说明,*会将我们传入的参数打包为tuple传入,但是这就存在一个问题,如果我们想在程序内部使用的话,传入多个参数也是一个问题,这里实际上*还具有一个功能,那就是解包,如:

1
2
3
4
x = [1,2,3]
y = (1,2,3)
z1 = test(1,*x)
z2 = test(1,*y)

这样的话我们就可利用列表或者元组实现多参数传入~

4.关键字参数

上面介绍的*可变参数不具有关键字,因此,在有些时候也不能实现我们想要的功能,如:一个数据表中,表的变量数不定,我们需要传入每个变量的参数,还需要知道每个参数对应的变量名,因此就需要用到关键字可变参数**

1
2
3
def test(**kwargs):
for key in kwargs:
print str(key) + ':' + str(kwargs[key])

用法如下:

1
2
3
4
5
6
input:
test(A = 1, B = 2 ,C = 3)
output:
A:1
B:2
C:3

同样的,我们可以利用tuple解包实现:

1
2
3
4
5
6
7
input:
x = {'A':1,'B':2,'C':3}
test(**x)
output:
A:1
B:2
C:3

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!