定义函数
编程语言中的函数(function)和数学中的函数类似,例如数学中的函数
f
(
x
)
=
x
2
+
1
f(x)=x^2+1
f(x)=x2+1,它由函数名f
、变量(输入参数)x
、函数定义的映射(完成的计算)
x
2
+
1
x^2+1
x2+1组成,当给输入参数x
指定一个值如2
时,函数会返回一个值5
。编程中的函数也包括这几个部分。先来看Python中函数的定义:
def fun(x):
return x ** 2 + 1
首先是关键字def
,它表示我们接下来要定义(define)一个函数,函数名是fun
,函数的命名规则和变量的命名规则一样,可以是字母、数字、下划线的组合,但不能以数字开头。然后函数名后面有一个括号,括号中的就是输入参数的名字,输入参数叫做形式参数,简称形参,形参类似于定积分中的积分变量,定积分的结果和积分变量的字母无关,形参也一样,形参取什么名字都行,只要和函数体中的一致。和多元函数类似,编程语言中的函数也可以有多个输入参数,多个输入参数之间用英文的逗号,
分隔。形参后面是一个冒号:
,冒号后面的就是函数体,也就是调用该函数时要执行的代码,和循环体一样,函数体前面也要缩进。这个函数体只有一条语句,return
表示返回,返回语句的作用是把return
后面的计算结果返回给调用者。
为了理解return
的作用,来看个下面的例子:首先定义了两个函数f1
f2
,f1
有return
,f2
没有,其它部分都一样。然后分别调用了这两个函数,并把调用的结果分别赋值给两个变量a
b
,最后打印两个变量的值。
def f1(x):
return x ** 2 + 1
def f2(x):
x ** 2 + 1
a = f1(2)
b = f2(2)
print(a, b)
5 None
打印结果表明a
的值为5,b
的值为None
,None
是一个特殊值,表示什么都没有。也就是说函数f2
没有返回任何东西给调用者。
使用函数
定义好函数之后就可以使用函数了,使用函数要指定函数名(调用哪个函数)和输入参数的值,调用函数时给形参指定的值叫做实际参数,简称实参。调用函数时有两种方式可以指定实参的值,一种是位置实参,这和数学中的函数类似,例如数学中的二元函数
f
(
x
,
y
)
f(x,y)
f(x,y),使用这个函数时
f
(
3
,
4
)
f(3,4)
f(3,4)自然就是令
3
3
3对应
x
x
x,
4
4
4对应
y
y
y。另一种是关键字实参,也就是按照形参的名字指定形参的值,例如定义了一个函数f(x, y, x)
,调用时可以写f(x = 1, z = 3, y = 2)
,它的效果和f(1, 2, 3)
是一样的。看个例子:
def fun(x, y, z):
print(x, y, z)
fun(1, 2, 3)
fun(1, z = 3, y = 2)
fun(y = 2, z = 3, x = 1)
help查看函数帮助
利用关键字实参需要知道定义函数时形参的名字,但许多函数都是某个模块中的,不是我们自己定义的,如何知道形参的名字呢?可以用help
函数,在Python命令窗口中,输入help(函数名)
(如果函数在别的模块中,要先导入相应的模块),就会输出该函数的形参等信息了。
默认参数
在定义函数时,可以给形参指定一个默认值,也就是当调用函数时没有给这个形参指定一个值的时候就用默认值作为形参的值。
def fun(x, y = 2):
print(x, y)
fun(1, 3)
fun(1)
使用函数可以减少重复的代码,当某一个功能需要在代码的不同都用到时,就可以定义一个函数。当调用一个函数时,可以在Python命令窗口中输入help(函数名)
查看该函数的形参等帮助信息。
函数帮助中的一些符号
在使用help
函数时,常常会看到*
/
[]
等符号,/
表示该符号前面的参数只能是位置实参,而不能是关键字实参,用逗号隔开的*
表示该符号后面的参数只能是关键字实参,而不能是位置实参,[]
表示默认参数。
如下图,有个逗号分开的/
,表示前面的参数p
q
都是位置参数,所以调用时用关键字实参报错了。