2.23 函数

函数是组织好的、可重复使用的、用来实现单一或者相关联功能的代码段。

函数能提高应用的模块性和代码的重复利用率。

Python提供了许多内建函数,比如print()

开发者也可以自己创建函数,这被叫做用户自定义函数。

函数定义语法如下:

函数通过“def”关键字进行声明,后接函数标识符名称和圆括号“()”。

任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

“函数_文档字符串”是一个可选项,起到一个帮助文档的作用。

return[表达式]结束函数,选择性地返回一个值给调用方。

不带表达式的return相当于返回None。

下面我们定义了一个求阶乘的函数:

在这里我们通过def这个关键词进行声明,后面是函数的名称fact,括号中的n是参数(不需要指定数据类型),然后是一个冒号“:”,下面是函数体,result是函数内部的局部变量,初始值为1,然后是一个for循环,由于range的上限是取不到的,所以1到n的阶乘要写成range(1,n+1),最后返回的result就是n阶乘的值。

定义好了之后,我们调用这个函数去求5的阶乘,就可以写成“fact(5)”,得到的结果是120。我们也可以把括号内的数字改成其他数字去计算其他数字的阶乘。

下面我们来看一个更加复杂的例子:

这里我们有一个item变量来保存阶乘的值,由于我们刚刚已经定义了一个求阶乘的函数,所以在这里就可以直接调用。

之后就是一个格式化输出。因为我们需要每两个换一行,所以在最后我们做了一个判断,如果这个i取余2等于1的话,我们就换行,从而实现了这个程序的要求。

虽然它实现的是一个相对复杂的功能,但是代码非常的清晰简短,这是因为我们在之前已经定义了fact函数。如果有错误需要修改,也会相对比较方便。

可选参数以集合的方式出现在函数声明中并紧跟着必选参数,可选参数可以在函数声明中被赋予一个默认值。已命名的参数需要赋值。

函数第一行语句可以选择性地使用文档字符串——用于存放函数说明。

函数可以返回一个元组(使用元组拆包可以有效返回多个值)。

下面来看一个例子:

我们定义了一个fun_example函数,它有三个参数:第一个参数是一个列表型参数,第二、三个参数都赋了初值,是可选参数。这个函数的作用是在listp函数中添加一项“A new item”,intp的值加一。最后返回这三个参数。

接下来我们调用了这个函数。我们先定义了第一个参数和第二个参数的值,然后它们作为参数代入到函数中,由于第三个参数没有写,所以在定义中的初始值就是它的值:

那么我们如何对这个返回的元组进行拆包呢?

通过下图的方式我们就可以做到拆包啦:

> 示例代码

1.py
# intp 和 stringp 是可选参数,它们有默认值
# 如果调用 fun_example 时只指定一个参数,那么 intp 缺省为 0 ,stringp 缺省为 A default string。
# 如果调用 fun_example 时指定了前面两个参数,stringp 仍缺省为 A default string。
# listp 是必备参数,因为它没有指定缺省值。
def fun_example(listp, intp=0, stringp="A default string"):
    listp.append("A new item")
    intp += 1
    return listp, intp, stringp
2.py
my_list = [1, 2, 3]
my_int = 10
print (fun_example(my_list, my_int))
print (my_list)
3.py
my_list = [1, 2, 3]
my_int = 10
v1,v2,v3=fun_example(my_list, my_int)
4.py
print(v1)
print(v2)
print(v3)

Last updated