函数的参数有:
1.形参和实参;
2.位置参数和关键字参数;
3.默认参数;
4.非固定参数;
1.形参和实参;
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
2.位置参数和关键字参数;
1 def test(x,y): 2 print(x) 3 print(y) 4 5 test(y=1,x=2) #关键参数值指定与位置无关 6 print('下面是位置参数,与形参一一对应'.center(100,'-')) 7 test(1,2) #位置参数与形参一一对应
返回:
注意:关键参数是不能写在位置参数前面的。
如:test(x=1,1) 会报错。
3.默认参数;
特点:调用函数的时候,默认参数非必须传递。
用途:
安装软件时的一键安装(默认安装值);
连接数据库的端口号,如“def conn(host,port=3302)”
1 def test(x,y=2): 2 print(x) 3 print(y) 4 5 test(y=1,x=2) #关键字参数 6 print('下面是位置参数,与形参一一对应'.center(100,'-')) 7 test(1,2) #位置参数 8 print('下面是默认参数'.center(100,'-')) 9 test(1,)
返回:
4.非固定参数;*args,**kw
*args 将多余的参数变为元组;
**kw 将多余的参数变为集合。
1 def test(x,*args): #使用*args,可以将传入的多余的实参转换为元组的形式存放起来。 2 print(x) 3 print(args) 4 5 test(1,2,3,4) 6 7 8 def test2(**kwargs): #使用**kwargs,可以将关键字参数转换为字典的方式存放起来。 9 print(kwargs) 10 11 test2(name='alex',age=8) #等价test2(**{'name':'alex','age';8})
返回:
各种参数的注意项:
1.关键参数是不能写在位置参数前面的,也就是说位置参数一定要在关键参数的前面。
2.*args接受N个位置参数,转换为元组的形式。
3.**kwargs将关键字参数转换为字典的形式,所以调用函数时不能传入非关键字参数给**kwargs。
4.各种参数的顺序为:
位置参数-->默认参数/关键字参数-->*args-->**kwargs
如果*args之前已经传入了关键字参数,后面如果传入位置参数,是不能成功地传入*args中去的,而是报错。