本篇主要阐述函数的一些使用方法,持续更新。
函数是用来实现单一或相关联功能的代码段,是代码复用的重要手段,函数能提高应用的模块性。
函数入门
1. 理解函数
函数是Python的重要组成部分,可以将特定的功能封装为一个函数。
通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像是一个黑匣子,程序将参数传入,该黑匣子经过一番处理之后,返回我们需要的数据。
2. 自定义函数和调用
Python提供了许多内置函数,比如print(),自己也可以创建函数,称为自定义函数。
def functionname(params):
"函数_文档字符串"
function_suite
return [expression]
规则:
- 函数代码块以 def 关键词开头,后接函数名称和圆括号()
- 括号内为形参
- 函数的第一行语句可以加注释
- 函数内容以冒号起始,通过缩进标识函数体
- return [表达式] 结束函数,没有会返回None
- 从可读性上讲,函数名应该用有意义的小写单词连接,下划线分隔
访问的时候直接
functionname()
调用Python的函数,需要根据函数定义,传入正确的参数。如果函数调用出错,一定要学会看错误信息
3. 函数文档
函数文档就是函数体的注释部分
def hi():
'''
这是函数的说明文档
'''
# 单行函数可以拼接到一行上
return x if x > y else y
通过help()函数查看指定函数的帮助信息,或者通过函数的doc属性访问函数的说明文档
help(hi)
print(hi.__doc__)
4. 返回多个值
如果程序需要有多个返回值,则可以将多个值包装成列表返回,也可以直接返回,Python可以自动将多个值封装成一个元祖。
>>> def sum_and_avg(x, y):
... sum = x + y
... avg = x / y
... return sum, avg
...
>>
Python提供序列解包功能,可以直接使用多个变量接收函数返回的多个值
> a,b = sum_and_avg(1,2)
>>> print(a,b)
3 0.5
>>> a = 1
>>> b = 2
>>> c = 3
>>> a,b,c
(1, 2, 3)
# 简化
>>> a,b,c = 1,2,3
>>> a,b,c
(1, 2, 3)
5. 递归函数
在一个函数体内调用他自身,被称为函数递归,函数递归包含了一种隐式的循环。
定义递归,有一个重要的规定:为避免死循环,递归一定要向已知方向上进行。
常用操作:遍历某个路径下的所有文件
设置递归的最大次数
import sys
sys.setrecursionlimit(9999999)
6. 空函数
如果想定义一个什么事也不做的空函数,可以用pass语句
def nop():
pass
pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
函数参数
1. 位置参数和个关键词参数
两者均是针对函数调用时而言
>>> def calc(width,height):
... width = str(width)
... height = str(height)
... return "宽:" + width + "高:" + height
...
位置参数按顺序接收
>>> calc(1,2)
'宽:1高:2'
关键词参数,无须遵守定义形参的顺序,可读性高
>>> calc(height=2,width=1)
'宽:1高:2'
2. 参数默认值
>>> def calc(width=0,height=0):
... width = str(width)
... height = str(height)
... return "宽:" + width + "高:" + height
...
>>> calc()
'宽:0高:0'
3. 参数收集
Python允许在形参前面加一个*,标识该参数可以接收多个参数值,多个参数值被当做元祖传入
>>> def test(a, *books):
... print(books)
...
>>> test(5, 'java', 'php', 'python')
('java', 'php', 'python')
函数作用域
>>> def foo():
... name = 'zhangsan'
... def too():
... print(name)
... name = 'lisi'
... too()
...
>>> foo()
Traceback (most recent call last):
File "", line 1, in
File "", line 6, in foo
File "", line 4, in too
UnboundLocalError: local variable 'name' referenced before assignment
too()函数中定义的name局部变量遮蔽了它所在foo()函数内的局部变量,会导致报错
nonlocal和global的功能大致相似,global用于声明访问全局变量,而nonlocal用于声明当前函数所在函数内部的局部变量。
函数高级
1. 使用函数变量
2. 使用函数作为函数形参
3. 使用函数作为返回值
lambda
1. 局部函数
def add(x,y): return x + y
2. lambda表达式
lambda表达式是功能更灵活的代码块,他的本质是匿名的、单行函数体的函数。
lambda x,y : x + y
两个用途:
- 对于单行函数,省去定义函数的过程,让代码更简洁
- 用完立即释放,提高了性能
常用内置函数
函数列表:https://docs.python.org/3/library/functions.html#abs
https://blog.csdn.net/fei347795790/article/details/102092736