前言
Python 中函数的应用非常广泛,我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。
函数的概念
python中有很多程序可能用到很多次,如果多次编写可能出现错误等问题。为此,python提供了一个功能,即允许我们把常用的代码放进一个模块,只要知道模块的名字就可以进行多次的调用。这个模块就叫做函数。
函数的定义
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
2、return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None。
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
实例:
def 定义一个函数,给定一个函数名 sum
声明两个参数 num1 和 num2
函数的第一行语句进行函数说明:两数之和
最终 return 语句结束函数,并返回两数之和
def sum(num1,num2):
"两数之和"
return num1+num2
# 调用函数
print(sum(5,6))
函数的调用
调用函数也就是执行函数。使用函数名进行调用。
[返回值] = 函数名([形参值])
匿名函数
lambda 是定义匿名函数的关键字,相当于函数的def。
lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行。
语法:
变量名= lambda 参数:表达式(block)
参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
表达式:不能包含循环、return,可以包含if…else…
举例:
1、创建一个匿名函数
# 变量名= lambda 参数:表达式(block)
func = lambda: 1 == 2
ret = func()
print(ret)
2、传递多个参数
func = lambda x, y, z: x + y + z
ret = func(1, 2, 3)
print(ret
递归函数
一个函数直接或者间接的调用自己,那这个函数就属于递归函数。必须有一个明确的结束条件;每次进入更深一层递归时,问题规模相比上次递归都应有所减少相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
举例:
def sum_recu(n):
if n>0:
return n +sum_recu(n-1)
else:
return 0
生成器函数
生成器是一个返回可以迭代对象的函数。在一个一般函数中使用yield关键字,可以实现一个最简单的生成器,此时这个函数变成一个生成器函数。简单来说,生成器函数就是函数中包含 yield语句的函数。yield语法:yield [返回值] ([] 表示可选参数)。yield的作用:yield可以去阻断当前的函数执行。当使用next()(或.next())函数,会让函数继续执行,yield后面的值作为next()函数返回值,当执行到下一个 yeild时,又会被暂停挂起。注:yield与return的区别:yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行;而return返回后,函数状态终止。
举例:
def mylist():
for i in range(3):
print("列表的第%s个元素:" % i, end="")
yield i
ml = mylist() # 创建一个生成器
print(next(ml))
print(next(ml))
print(next(ml))
print(next(ml)) # 当生成器遍历完后,再遍历就会报错