python中调用函数时,参数用法通常有以下四种:
- 位置参数:对应位置需要对应参数,顺序,位置必须要和函数定义(声明)一致。一个萝卜一个坑,哪个坑里种什么萝卜,不能搞错了。这种和传统
c
语言用法很像- 默认参数:有些参数在函数声明时已经定义好了,你可以在调用时不用输入,则默认调用你早已填好的那个参数;如果自己调用时把参数带上了,那么就会覆盖掉原来的参数。
- 可变参数:当我们不确定输入多少参数,但又必须按照顺序收集参数,就需要用到可变参数。
- 关键字参数:关键字参数在输入时,一定要以
参数名 = 参数值
这种形式来调用函数。
也就是说,本来有个名叫信息收集
的函数,你可填信息收集(张三,男,1998.10)
,现在要这样写:信息收集(姓名 = '张三',性别= '男',出生年月 = '1998.10')
注意:python3
完全支持以下参数,python2
不支持关键字参数
1.位置参数
假如有以下一个函数,计算圆周周长:
def circle(r, pi)
length = 2 * pi * r
return length
当我们调用时:
circle(2, 3.14)
前面是半径,后面是圆周率值 π \pi π。顺序不能错,个数也要对,所谓一一对应
如果要反着用,要参数名 = 参数值
circle(pi = 3.14, r = 4)
2.默认参数
还是上面的例子,圆周率是一个确定的值,我们通常只改变它的精度。一般在声明(定义)函数时就设定好它的值了。
def circle(r, pi = 3.14):
return 2 * pi * r
一般调用,我们无需考虑 π \pi π这个值
circle(4)
当需要改变精度时,用如下调用方式,覆盖默认值
circle(4, 3.1415926535)
3.可变参数
- 1.参数收集
- 当我们传输的参数个数不确定,该怎么做呢?
举例:假设需要记录下班上举手回答问题的同学的名字
def name(*name):
print("举手的同学有:", name)
return 0
调用函数
name('haha', 'gege','xiaoming')
结果:
举手的同学有:('haha', 'gege','xiaoming')
输出结果是元组,并且想输入多少就能输入多少
- 当我们传输的参数个数不确定,但又必须要按照顺序传参该怎么做呢?
举例:学校需要收集信息,姓名,出生年月等。住校学生无需提供家庭住址,但是走读的学生需要提供。这就是典型的按顺序收集信息,但是具体项目却可以根据情况加以变通的实例。
以参数名 = 对应值
的传参形式,收集参数,并在内部构成一个字典
例如信息收集函数定义如下:
def student(**info):
print("学生信息:", info)
return 0
调用方式:
student(name = 'xiaoming', sex = 'female', age =19)
结果:
学生信息:{'name': 'xiaoming', 'sex' = 'female', 'age' = 19}
- 2.逆向参数收集
逆向参数收集更为常用一点:在元组或者字典中,当调用函数时传入该元组或字典。
例如,在保存着很多组圆周信息(半径r,不同精度 π \pi π)的元组中,当我们要查看各个小组下圆周周长是多少,代码如下:
data = ((2, 3.14), (3, 3.14159), (5, 3.1415926))
for i in data:
circle(*i)
上述元组共三组数据,从第0组到第二组,circle( *i)
将依次装入,并计算出结果
对于字典,用法也是一样的
还是学生信息采集的问题,定义学生信息的字典,并用student()
函数读取:
info = {
'name' = 'xiaoming',
'sex' = 'female'
'age' = 19
}
infomation = student(**info)
两个星号的作用,把字典拆解为单个的
参数名=参数值
的形式分别赋值给函数的各个参数。
通常我们可以在登陆某网站或者数据库时,将网站网址,访问端口,用户名,用户密码设置为字典,通
过逆向参数收集将信息填入,以便访问后台数据。
4.关键字参数
该参数必须以
参数名称 = 参数值
的形式赋值,否则将报错
- 举例:
def student(name, age, *, sex):
print("学生姓名:", name)
print("学生年龄:", age)
print("学生性别:", sex)
return 0
调用时,*
后面参数必须要写成sex = 'female'
,直接写成'female'
错误的
student('xiaoming', 18, sex = 'female')#正确
student('xiaoming', 18, 'female')#错误
显然,关键字参数只能在位置参数后面,否则将出错。