我们在定义函数时有时候有些参数在大部分情况下是相同的,一小部分情况下是不同的,所以为了提高函数的适用性,为了方便函数调用,也为了提供一些备选参数,我们可以将这些参数设置为默认参数,那么该参数在函数调用过程中可以不需要明确给出。
一、基本使用
def function(para_1,para_m=m,para_n=n):
expressions
函数声明只需要在需要默认参数的地方用 = 号给定即可, 但是要注意所有的默认参数都不能出现在非默认参数的前面。
二、实例
def function(a,b=2,c=3):
print(a+b+c)
function(2)
输出结果为:7
function定义的时候指定b和c的默认参数,所以调用的时候就不需要再给出b和 c的值了,但是如果你不想用默认的值,可以在函数调用的时候重新指定,重新指定的值会覆盖掉默认的值,举例:
def function(a,b=2,c=3):
print(a+b+c)
function(2,0,0)
输出结果为:2
切记默认参数一定要在非默认参数的后面,例如:下面这种写法是错误的:
def function(b=2,c=3,a):
print(a+b+c)
function(2,0,0)
错误提示如下:
File "D:/Users/hupo/PycharmProjects/pro1/test/test1.py", line 1
def function(b=2,c=3,a):
^
SyntaxError: non-default argument follows default argument
三、进阶
3.1 自调用
如果想要在执行脚本的时候执行一些代码,比如单元测试,可以在脚本最后加上单元测试代码,但是该脚本作为一个模块对外提供功能的时候单元测试代码也会执行,这些往往我们不想要的,我们可以把这些代码放入脚本最后:
if __name__=='__main__':
#code_here
如果执行该脚本文件的时候,该 if 判断语句将会是 True,那么内部的代码将会执行。 如果外部调用该脚本文件的时候,if 判断语句则为 False,内部代码将不会执行。
3.2 可变参数
顾名思义,函数的可变参数是传入的参数的个数
可以变化的,1个,2个到任意个。当然可以将这些参数封装成一个 list 或者 tuple 传入,但不够 pythonic。使用可变参数可以很好解决该问题,
注意可变参数
在函数定义不能出现在特定参数和默认参数
前面,因为可变参数会吞噬掉这些参数。
def function(a,b=2,c=3,*numbers):
total=0
for i in numbers:
total+=i
print(a+b+c+total)
if __name__=='__main__':
function(2, 0, 0,2,3)
定义了一个函数function()
,传入一个参数为非默认参数 a
,两个默认参数b
,c
, 后面的参数 *numbers
使用了*
修饰,表明该参数是一个可变参数,这是一个可迭代的对象。该函数输入各个参数的数值,输出相加的总和。所以可以这样调用函数 function(2,0,0,2,3)
,输出的结果为:7
, 也可以这样调用function(2,0,0,2,3,4)
,输出的结果为:11
。这里需要注意可变参数的位置在默认参数之后
3.3 关键字参数
关键字参数可以传入0个或者任意个含参数名的参数,这些参数名在函数定义中并没有出现,这些参数在函数内部自动封装成一个字典(dict).
def func(name,**other):
print('name:',name)
for k,v in other.items():
print(k,v)
if __name__=='__main__':
func('hupo',age='26',high='180',like='lizhongqi')
定义了一个函数,传入一个参数 name,
和关键字参数other
,使用了 ** 修饰。表明该参数是关键字参数,通常来讲关键字参数是放在函数参数列表的最后
。如果调用参数 func(‘hupo’,age=‘26’,high=‘180’,like=‘lizhongqi’)输出:
name: hupo
age 26
high 180
like lizhongqi
通过可变参数和关键字参数,任何函数都可以用 universal_func(*args, **kw)
表达。