Python——函数的参数

函数的参数分为:

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
原文地址:https://www.cnblogs.com/Luna-kaka/p/8996754.html