函数的参数分为:
1. 必须参数
2. 关键字参数
3. 默认参数
必须参数
最基本的特性是,我们在函数的参数列表里面定义的参数是必须要传递的。
def add(x,y): result = x +y return result
我们在调用这个函数的时候,必须要给x和y分表要进行赋值,如果两个都不赋值或者只给一个赋值,是会报错的。
我们在定义这个函数的时候,在这个参数列表里面给了x y,我们可以叫x 和 y 叫做形式参数,简称 形参 。
有形式参数,相对应的就有实际参数,简称 实参。
实际参数是指在调用函数的过程中,我们往函数参数列表里面传递的实际的取值。
关键字参数
我们拿上一个函数来举例
def add(x,y): result = x +y return result
必须参数在调用的时候是讲究一个顺序的,第一个传入的实参是x的值,第二个传入的是y的值
那如果我们要第一个传入的是y值,第二个传入的是x值该如何去实现呢
关键字参数可以不用考虑函数参数的顺序,可以任意指定参数的顺序从而实现参数的调用
c = add(y = 5,x = 2)
这样就能先给y赋值了。当然,如果赋值一个参数还是不行的,有多少形参,就要有多少个实参。
默认参数
如果我们需要函数的参数列表很长,而我们又需要多次使用这个函数,有很多的参数会重复输入,那我们就可以给这个函数设置一个默认值
def print_student_files(name,gender,age): print('我叫' + name) print('我今年' + str(age) + '岁') print('我是'+ gender + '生')
这是一个记录学生姓名你、年龄、性别的函数(注意,第三行的age要转换成字符串,因为字符串不能和int类型相加)
>>> print_student_files('安妮','女',18) 我叫安妮 我今年18岁 我是女生
如果有30个同学,大多数都是18岁的女生。那么我们可以用到默认参数:
def print_student_files(name,gender='女',age=18): print('我叫' + name) print('我今年' + str(age) + '岁') print('我是'+ gender + '生')
这样,我们只需要输入名字就可以了
>>> print_student_files('曼妮') 我叫曼妮 我今年18岁 我是女生
如果有个同学年龄和性别和设置的默认值不一样,则需要传递对应参数:
>>> print_student_files('约翰','男',19) 我叫约翰 我今年19岁 我是男生
总结一下默认参数的规则:
在定义的时候,如果你想让某个参数拥有默认值,那么久在形参的后面加上一个'=',并且把默认值赋给这个形参
如果你没有给某个形参设置默认值,那么你一定要传递给一个实参。
易错点:
必须参数加上默认参数,后面再加一个必须参数
错误实例1:
def print_student_files(name,gender='女',age): print('我叫' + name) print('我今年' + str(age) + '岁') print('我是'+ gender + '生')
SyntaxError: non-default argument follows default argument
报错:不能把非默认参数放在默认参数之后
错误实例2:
我们要更改第二个默认参数(年龄),第一个默认参数(性别不变)
假设我们把每个参数都转换成字符串
>>> def print_student_files(name,gender='女',age=18): print('我叫' + str(name)) print('我今年' + str(age) + '岁') print('我是'+ str(gender) + '生') >>> print_student_files('安妮',17) 我叫安妮 我今年18岁 我是17生
解决方法:
我们把年龄17当做性别传入进了性别的参数里。解决方法是运用关键参数
>>> print_student_files('安妮',age = 17) 我叫安妮 我今年17岁 我是女生
错误实例3:
把默认参数和必须参数混着一起调用:
>>> print_student_files('安妮',gender='女',17) SyntaxError: positional argument follows keyword argument