(十)函数
1. 函数的定义和调用
1.1 函数的定义
def functionname( parameters ):'''函数说明_文档字符串'''function_suitereturn [expression]
1.2 函数的调用
functionname( parameters )
2. 形参和实参
定义函数的时候,向函数传递的参数 parameters 就是形参。
调用函数的时候,向函数传递(如果有)的参数就是实参。
2.1 位置实参
调用函数的时候,传递的实参与形参要一一对应
,像这种基于位置的最简单的关联方式称为位置实参。
def f(num, str1):'''测试'''return str(num) + str1f(1, '2') # 12f('1', 2) # TypeError
2.2 关键字实参
关键字实参是传递给函数的 名称-值对,在是实参中就已经将形参与实参关联起来了。
def f(num, str1):'''测试'''return str(num) + str1f(str1 = '2', num = 1) # 12
2.4 默认值形参
给形参以默认值,这样在调用函数但缺少相应参数时,函数将使用默认值。
注意,使用默认值时,必须先列出没有默认值的形参,最后列出默认值形参。(这样函数才能正确读取位置实参)
2.5 让实参变成可选的
有时候传递的实参的数量可能并没有这么多,即参数是可选的。
给可选形参的默认值设为 '',并放到形参末尾,然后根据条件判断,确定参数个数。
def sum(x1, x2, x3=''):'''测试'''if x3:return x1 + x2 + x3else:return x1 + x2
3. 传递列表
python 函数可以将列表作为参数传递,并在函数内部对其进行一些修改等操作。
4. 传递任意数量的实参
python 函数的通过将形参设置为 *paras 的形式来接受任意数量的参数。
python 将接受的任意数量的实参封存在一个元组 (paras) 中,使用 for 在函数体中即可遍历。
def sum(*x):y = 0for i in x:y += ireturn ysum(1,2,3) # 6
5. 使用任意数量的关键字实参
python 函数以 **paras 的形参形式来接受任意数量的关键字实参。
并使用 for k, v in paras.items() 来遍历操作传进来的 键值对 实参。
def func(**x):d = {}for k, v in x:d[k] = vreturn d
接受任意数量的参数的形参形式可以与位置参数一起使用,但要放到各参数的末尾。
6. 将函数存储在模块中
通过创建 .py 文件来创建模块,并将函数代码写在该模块中。
导入和使用模块的方法:
import module_namemodule_name.func_name( paras )
若模块文件放在指定文件夹(例如lib)中,则要使用 from 从目录路径中导入:
from lib import module_namemodule_name.func_name( paras )
导入指定函数:
from module_name import func_name1, func_name2, func_name3func_name1()func_name2()func_name3()
使用 as 指定别名
import x_module_name as xfrom x_module_name import func as ff()
导入模块中所有函数:
from module_name import *
7. 函数编写指南
- 所有的函数都要有描述其功能的注释,且使用文档字符串的形式紧跟在函数定义后
def func():'''函数说明文档字符串'''# do something
- 使用关键字实参和给参数指定默认值的时候,等号两边不要留空格
def func(x, y=10, z=20):# do something
- PEP 规定了一行代码不超过 79 个字符,当函数形参过多时候可换行然后按两次 并使用定义函数。
def func(para0, para1, para2,para3, para4, para5):# do something
8. lambda 表达式
可以用 lambda 关键字来创建一个小的匿名函数。这个函数返回两个参数的和: lambda a, b: a+b 。Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法糖。
语法糖:
name = lambda [list] : 单个表达式
正常函数写法:
def name(list):return 单个表达式name(list)
