函数通常是由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:
def 函数名(参数列表):
函数体
例如:
def hello():
print("hello")
print("world!")
以上实例定义的hello()函数虽然不包含任何参数,但是函数名后的一对括号
是不能省略
的。在实际应用中,稍复杂的函数通常都会包含一个或多个参数。
下列代码定义了一个计算矩形面积的函数area()和一个欢迎信息打印函数welcome()。
# 计算矩形面积的函数area()
def area(width, height):
return width * height
# 输出汉英信息的函数
def welcome(name):
print("Welcome ", name)
# 调用welcome函数
welcome('张三')
# 调用area函数
w = 4
h = 9
print("with=", w, "height=", h, "area=", area(w, h))
上述代码中,首先定义了area()和welcome()两个函数,其中函数area()提供了width(宽)和height(高)两个参数,函数welcome()函数只提供了一个参数name。然后,分别调用了area()和welcome()函数,在控制台输出了相应的结果,结果如下:
Welcome 张三
with= 4 height= 9 area= 36
以下代码定义了无任何操作的空函数nop()。
def nop():
pass
在Python代码中,pass语句通常可以用来作为占位符,表示什么操作都不执行。比如在项目起始阶段,如果还没想好函数具体实现时,可以先放置一个pass语句,让代码先成功运行起来。待项目框架搭建完毕后,在进行相应的具体实现。
通常情况下,在Python语言中定义一个具有特定功能的函数需要符合以下规则:
- 函数代码块以def关键字开头,后接函数标识符名称和形参列表;
- 任何传入的参数和自变量必须放在圆括号内;
- 函数的第一行语句可以选择性地使用文档字符串(即函数说明);
- 函数内容以冒号起始,并且严格统一缩进;
- 函数都有返回值,默认返回None。
2.1.3 形参和实参
在编程语言中,函数定义时用的是形参,调用时用的是实参
-
形参(parameter)
,全称为"形式参数"
,不是实际存在的变量,又称虚拟变量。形参是在定义
函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。 -
实参(argument)
,全称为"实际参数"
,是在调用
时传递给函数的参数。实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。 -
形参和实参的功能是数据传送。
在调用函数时,实参将赋值给形参。必须注意实参的个数、类型应与形参要一一对应
,并且实参必须要有确定的值
。形参的作用域一般仅限函数体内部,而实参的作用域根据实际设置而定。
以计算面积的函数为例:
# 计算矩形面积的函数area()
def area(width, height):
return width * height
# 调用area函数
w = 4
h = 9
print("with=", w, "height=", h, "area=", area(w, h))
上述代码中,函数area()定义处的width和height就是形式参数,函数体外定义的变量w和h是实际参数。可以看到,把实参w和h传入函数体后,就把相应的值赋值给了形参width和height。形参width和height的作用域只限于area()函数体内,而实参w和h作用域则根据外部调用处的设置而定。
对于函数形参列表,默认情况下函数调用时的参数值与参数列表声明中定义的顺序是一致。Python语言也允许函数调用时参数顺序与声明时不一致,即显示指明关键字参数,并根据参数的指定进行赋值。
def func(x, y):
print('x+y=', x + y)
print('x*y=', x * y)
# 等效于func(x=3,y=2),也等效于func(3,2)
func(y=2, x=3)
上述代码中,函数func()定义时形式参数的顺序是func(x, y),但是调用时实际参数的顺序确是func(y = 1, x = 2)。这是因为Python语言中提供了一种关键字参数的机制,可以给开发者提供更大的灵活性。
2.1.4 函数的返回值
-
函数的返回值是函数执行完成后,系统根据函数的具体定义返回给外部调用者的值。
-
在实际开发中,有时不仅仅要执行某个函数的功能,而且还需要把该函数的执行结果作为其他函数或功能的计算单元。所以,函数返回值是非常有用的
-
在Python语言中,当函数运行到return语句时即执行完毕,同时将结果返回。因此,可以在函数内部通过条件判断和循环设置实现较复杂的逻辑,并返回预期的结果。如果没有return语句,函数体内所有语句执行完毕后默认返回None。
# 函数定义
def add(x, y):
print('x+y=', x + y)
return x + y
# 函数调用
result = add(y=1, x=2)
print(result)
上述代码中,定义的add()函数返回“x+y”的运算结果。可以看到,调用该函数后,把该函数的返回值赋值给了变量result ,最后输出了变量result 的值。
另外需要注意的是,在Python语言中,函数也可以有多个返回值,例如:
# 函数定义
def add(x, y):
print('x+y=', x + y)
print('x*y=', x * y)
return x + y, x * y
# 函数调用
a, b = add(y=1, x=2)
print(a, b)
上述代码中,定义的add()函数有连个返回值,分别是“x+y”和“x*y”。可以看到,调用该函数后,把该函数的返回值分别赋值给变量a,b,最后输出了变量a和变量b的值。
注意: 返回值和接收变量的对应关系,是按照顺序一一对应的