前言
在编写函数时,经常希望函数接口更加灵活,可以支持默认参数、可变参数、关键字参数等特性。下面将详细介绍这些函数传参的使用方法。
1. 常规参数
在 Python 中,函数的传参是一种简单直接的过程,例如:
def test(A, B, C):return C(A), B(A)
在上面的例子中,A
、B
是两个普通的参数,可以是常数、列表或元组,而 C
则是一个类或函数。函数的调用方式如下:
z = test(1, 2, func)
x, y = test(1, 2, C=func)
函数的参数传递过程中,未指定关键字的参数按照函数定义的参数顺序进行传递,而指定了关键字的参数则会按照指定的关键字进行匹配赋值。函数的返回值会将 return
后面的部分以元组的方式返回,如果 return
后为空,则返回 None
。
2. 默认参数
有时候函数的参数较多,在某些情况下,很多参数都是一样的。因此,我们希望可以将这些参数固定,只在需要改变时再传入新值。这就是默认参数的作用,例如:
def test(A=1, B=2, C=func1):...
对于默认参数,我们可以采用以下几种使用方式:
test()
test(A=3)
test(1, C=func2)
这种方式使得函数传参更为灵活。但需要注意的是,默认参数必须放在非默认参数的后面。
3. 可变参数
除了常规参数之外,Python 还提供了更为灵活的参数工具——可变参数。当我们不确定需要传入的参数数量时,可以利用 Python 的 *
进行设计。例如:
def test(A, *args):print(str(A) + ':' + str(args))
上面的 *args
允许我们传入任意数量的参数,这些参数将被打包为一个元组传入函数。
test(1, 2, 3, 4) # 输出:1:(2,3,4)
此外,*
还具有解包的功能,例如:
x = [1, 2, 3]
y = (1, 2, 3)
z1 = test(1, *x)
z2 = test(1, *y)
这样就可以利用列表或元组实现多参数传入。
4. 关键字参数
在有些情况下,我们需要传入的参数是以关键字形式出现的,而可变参数 *
并不支持关键字。这时就需要用到关键字可变参数 **kwargs
,例如:
def test(**kwargs):for key in kwargs:print(str(key) + ':' + str(kwargs[key]))
使用方式如下:
test(A=1, B=2, C=3) # 输出:A:1 B:2 C:3
同样地,我们也可以利用元组解包来实现:
x = {'A': 1, 'B': 2, 'C': 3}
test(**x) # 输出:A:1 B:2 C:3
通过以上介绍,我们可以更加灵活地使用 Python 中的函数传参方式。