函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
一、函数基础
说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
先来看下面一个简单的例子:
def my_func(message):
print('Got a message: {}'.format(message))
# 调用函数 my_func()
my_func('Hello World')
# 输出
Got a message: Hello World
其中:
def 是函数的声明;
my_func 是函数的名称;
括号里面的 message 则是函数的参数;
而 print 那行则是函数的主体部分,可以执行相应的语句;
在函数最后,你可以返回调用结果(return 或 yield),也可以不返回。
总结来说:
def name(param1, param2, ..., paramN):
statements
return/yield value # optional
和其他需要编译的语言(比如 C 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。
再来看一个例子:
def my_sum(a, b):
return a + b
result = my_sum(3, 5)
print(result)
# 输出
8
定义了 my_sum() 这个函数,它有两个参数 a 和 b,作用是相加;随后,调用 my_sum() 函数,分别把 3 和 5 赋于 a 和 b;最后,返回其相加的值,赋于变量 result,并输出得到 8。
需要注意,主程序调用函数时,必须保证这个函数此前已经定义过,不然就会报错,比如:
my_func('hello world')
def my_func(message):
print('Got a message: {}'.format(message))
# 输出
NameError: name 'my_func' is not defined
但是,如果我们在函数内部调用其他函数,函数间哪个声明在前、哪个在后就无所谓,因为 def 是可执行语句,函数在调用之前都不存在,我们只需保证调用时,所需的函数都已经声明定义:
def my_func(message):
my_sub_func(message) # 调用 my_sub_func() 在其声明之前不影响程序执行
def my_sub_func(message):
print('Got a message: {}'.format(message))
my_func('hello world')
# 输出
Got a message: hello world
另外,Python 函数的参数可以设定默认值,比如下面这样的写法:
def func(param = 0):
...
在调用函数 func() 时,如果参数 param 没有传入,则参数默认为 0;而如果传入了参数 param,其就会覆盖默认值。
Python 和其他语言相比的一大特点是,Python 是 dynamically typed 的,可以接受任何数据类型(整型,浮点,字符串等等)。对函数参数来说,这一点同样适用。
比如还是刚刚的 my_sum 函数,我们也可以把列表作为参数来传递,表示将两个列表相连接:
print(my_sum([1, 2], [