python中的函数中传递的参数类型包括:位置参数,默认参数,可变参数、关键字参数。
一 位置参数
下图函数add中a,b做为参数,函数定义时写的参数为形式参数简称形参;调用函数add()传入的参数3,4为实际参数简称实参。所以在调用函数add时,结果就是7。
这样就大大提高了代码的复用性,再来看计算两数之间的和,就不用每次都去修改函数内部的代码,将两数作为实参传给函数就行。
这里实参与形参需要注意的是必须是一一对应的,否则报错:
比如下面形参有a,b两个,我只传了一个实参;则提示缺少1个必需的位置参数:‘b’。
同理实参数大于形参数也会报错:add()接受2个位置参数,但给出了3个。
形参的数据类型取决于实参传入的数据类型:
二 默认参数
默认参数是指在函数定义的时候,给形参一个默认值。
如图所示,age为默认参数,默认等于18;所以调用函数的时候,只传了name的实参这时默认参数就会生效。
如果在调用函数时,传入的实参与形参一一对应,那么就会覆盖默认参数的值。
需要注意的是实参与形参必须是一一按顺序对应的,如下age是默认参数,这里我想打印出name,age,gender,但是我只传了两个实参,"女"就会按顺序覆盖age。
所以当我们调用函数时也可以输入“参数名=值”(关键字参数):
当形参包括位置参数、默认参数时,其位置顺序位置参数在默认参数前面。否则会报错:非默认参数跟随默认参数。
三 可变参数(*args),(**kwargs)
传入参数是可变的,当不确定参数个数的时候可以使用不定长参数。其结果转换成元组类型。
位置参数与可变参数结合使用,位置参数应在可变参数前面,这里name接收了”张三“,剩下的可变参数全部接收。
如果可变参数在位置参数前面的,传入的实参按顺序都会被可变参数接收,所以后面的位置参数接收不到实参会报错:info()缺少1个必需的关键字参数:‘name’
默认参数与可变参数结合使用时,两者顺序可随意,只不过当默认参数在可变参数后面的时候,传入的实参都会被可变参数接收,每次默认参数的值都会生效。
四 关键字参数
前面写过使用关键字参数来确定函数传入的参数值“参数名=值”。以key=value的形式传入实参,使用可变参数(**kwargs)以key value的形式接收,结果返回字典类型。
结合位置参数使用必须放在位置参数后面,否则报错:
结合默认参数必须放在默认参数后面,否则报错: