我们在使用函数前,得先定义一个满足自己使用要求的函数。定义函数的基本结构是:
---定义函数以def
关键词开头,后面跟着函数名、圆括号()
、括号中的参数、冒号;
---接着,在缩进块中编写函数体,函数的第一行语句一般是写文档字符串,用于存放函数说明,也可以选择不写;
---Return[expression]
表示结束函数,并返回值。而不带表达式的return
相当于返回空值。
Python 的函数参数主要包含以下几种:
- 必选参数;
- 默认参数;
- 可变参数;
- 关键字参数。
必选参数也叫位置参数,是函数中最常用的参数。必选参数就是在调用函数的时候必须指定参数值。例如:
如果调用plus
函数时,传入的参数不符合要求,则会出现错误。例如:
默认参数是指给函数参数提供默认值,如果在调用函数的时候没有给该参数传递值,则该参数使用默认值。例如:
从上面的例子可以看出,在函数调用过程中可以不用给默认参数传递参数值。但在使用默认参数时,有两点需要注意:
- 默认参数要放在所有必选参数的后面;
- 默认参数必须指向不变对象。
在有些情况下,我们在定义函数的时候,还不能确定函数应该包含多少个参数,这时我们可以使用可变参数,可变参数就是传入的参数数量是可变的。例如:
输出结果:
在上面的例子中,numbers
就是一个可变参数,可变参数前面加一个标识符*
。在函数内部,可变参数numbers
接收到的值是一个tuple(元组)
。我们在调用参数是可变参数的函数时,可以给该函数传递任意个数的参数,包括0
个参数。
可变参数允许我们在调用函数时传入任意个参数,这些可变参数在函数调用时自动组装为一个tuple
。而关键字参数允许我们传入任意个含参数名的参数,这些关键字参数在函数调用时自动组装为一个dict(字典)
。也就是说,关键字参数将长度任意的键-值对,作为参数传递给函数。例如:
输出结果:
在上面的例子中,kw
就是一个关键字参数,关键字参数前面加**
表示。关键字参数可以扩展函数功能,使传递参数过程更为简便。例如:
输出结果:
但在上述例子中,将字典中的值向plus
函数中传递参数的方法过于累赘,可以采取关键字参数的方法。例如:
输出结果;
使用关键字参数**dict
的方法,可以大大提高参数传递的效率。
我们在函数定义过程中,可以同时用到必选参数、默认参数、可变参数、关键字参数中的一种或几种。但是需要特别注意的是,这四种参数在使用的过程中是有顺序的,顺序依次应该是必选参数、默认参数、可变参数和关键字参数。例如:
输出结果;
上面这个例子中,向plus
函数中传入了两个必选参数1
和2
。必选参数必须得提供值,但是默认参数、可变参数和关键字参数可以不用提供值,我们还可以给默认参数、可变参数和关键字参数传递值。例如:
输出结果:
- 不同类型的参数是有顺序的,依次是必选参数、默认参数、可变参数和关键字参数;
- 默认参数一定要用不可变对象,用可变对象容易产生逻辑错误;
*args
表示的是可变参数,*args
接收的是一个元组;**kw
表示的是关键字参数,**kw
接收的是一个字典。