Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。那么Python的四种函数参数,普通参数、指定参数、默认参数、动态参数的区别是什么呢?
普通参数
Python函数的普通参数就是形参为一个普通的变量,并且实际参数和形式参数的个数确定。代码如下:
# name 叫做函数func的形式参数,简称:形参 def func(name): print name # ######### 执行函数 ######### # '风轻情淡' 叫做函数func的实际参数,简称:实参 func('风轻情淡')
指定参数
Python函数的指定参数是指定Python函数形式参数的实际参数,可以不按照函数的形式参数声明顺序传入参数。
默认参数
Python的默认参数则是在普通参数的基础上,给形式参数一个默认的取值。默认参数可以简化函数的调用。设置默认参数时要注意:
def func(name, age = 18): print "%s:%s" %(name,age) # 指定参数 func('风轻情淡', 19) # 使用默认参数,省去默认参数传参 func('老男孩')
1、必选参数在前,默认参数在后,否则Python的解释器会报错,默认参数放必选参数的前面容易产生歧义,Python解释器不知道传入的值为哪个参数的值。
2、如何设置默认参数。当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
动态参数
Python的动态参数是传入参数的形式参数个数是不确定的。它以一个*加上形参名的方式来表示这个函数的实参个数不定,可能为0个也可能为n个。注意一点是,不管有多少个,在函数内部都被存放在以形参名为标识符的元组中。
Python的动态参数有如下三种执行方式:
# 动态参数形式1 def func1(*args): print(args) # 执行方式 func1(11, 33, 4, 4454, 5) # 执行方式 li = [11, 2, 2, 3, 3, 4, 54] func1(*li) # 动态参数形式2 def func2(**kwargs): print(kwargs) # 执行方式 func2(name='风轻情淡', age=18) # 执行方式 li = {'name': '风轻情淡', 'age': 18, 'gender': 'male'} func2(**li) # 动态参数形式3 def func3(*args, **kwargs): print(args) print(kwargs)
比较浅显的理解就是,形式1的动态参数传入了一个列表作为实际参数,形式2则是传入一个字典作为实际参数,形式3是前两者的组合形式。