1.定义一个函数,该函数有两个形参,将形参y赋值为2,则y为默认参数
def test(x,y=2):
print(x)
print(y)
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
调用该函数时,可以只为x赋值,test(1),此时输出x,y的值为1,2;也可以给x,y均赋值1,3,即test(1,3),此时输出结果1,3.
由此可以看出默认参数的特点,在调用函数的时候,默认参数的值是非必须传递的;
鉴于默认参数的该特点,有两个用途:(1)默认安装值,某个软件的默认安装位置;
(2)连接数据库的端口号 def conn(host,port=3306):pass
2.默认参数组
(1)在实参数据不固定的时候,对于形参的定义:*args,可以接受多个实参,将多个实参放入一个元组中,*代表args接收的参数个数不固定,args是变量名
但是要注意:*args接收的是n个位置参数,转换成元组的形式
、
def test(*args): # *代表args接收的参数个数不固定,args是变量名
print(args)
test(1,2,3,4,5) #也可以写为test(*[1,2,3,4,5]) *args=*[1,2,3,4,5],即args=tuple[1,2,3,4,5]
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
输出结果以元组的形式输出:(1, 2, 3, 4, 5)
(2)也可以将形式参数与默认参数组结合在一起使用:
def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5,6,7) #1会传给x,其余的值会传递给args
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
在以上代码中,将1赋予形参x,将(2,3,4,5,6,7)以元组的形式赋予args,所以输出结果为:
1
(2, 3, 4, 5, 6, 7)
3.将参数以字典的形式传递,使用**kwargs,接收N个 关键字 参数转换成字典的方式
(1)
def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
test2(name='wu',age=18,sex="F") #name为key,wu为name的value
#也可以这样写:test2(**{'name':'xiao','age':20})
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
输出结果以字典的方式呈现:
{'name': 'wu', 'age': 18, 'sex': 'F'}
wu
18
(2)将形参与字典结合起来:
def test3(name,**kwargs):
print(name)
print(kwargs)
test3('wu',age=18,sex='m')
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
将wu赋予name,将age,sex以元组形式赋予kwargs,输出结果为:
wu
{'age': 18, 'sex': 'm'}
4.将形参、默认参数与字典相结合起来使用:
def test4(name,age=18,**kwargs): #参数组放在后面
print(name)
print(age)
print(kwargs)
test4('wu',1,sex='m') #给默认参数age赋值,可以直接当作位置参数赋值:test4('wu',1,sex='m');也可以当作关键字来赋值:test4('wu',age=1,sex='m')
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
要注意的是,在定义函数的时候,参数组放在最后面;在调用函数,给参数赋值的时候,可以将默认参数当成位置参数或关键字来赋值,均可以。
在以上代码中,将wu赋予了name,将1赋给了age,将sex赋给了kwargs,输出结果如下:
wu
1
{'sex': 'm'}
5.将形参、默认参数、默认参数组与元组结合起来:
def test5(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
test5('wu',age=1,sex='m',hobby='draw') #*args接收的是n个位置参数,转换成元组的形式
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010700175891775.gif)
以上代码中将wu赋予name,将1赋予age,由于接收的是为位置参数,所以在此处输出为空,将sex、hobby的值赋予kwargs。
输出结果为:
wu
1
()
{'sex': 'm', 'hobby': 'draw'}
6.函数的定义与调用顺序,要先对函数定义,然后才可以对函数调用
def test5(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs)
logger("TEST5")
def logger(source):
print("from %s" % source)
test5('wu',age=1,sex='m',hobby='draw')
如以上程序,定义了两个函数test5与logger,并且在test5中调用了logger函数,如果此时先调用test5函数,然后定义logger函数,会报错;所以我们应该先定义logger函数,然后在调用test5函数。