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