1.匿名函数:
定义时没有函数名的函数,临时只使用一次的简单函数,一般用于给高阶函数传参
#lambda参数一,参数二... :返回值
print((lambda x,y,z :x+y+z)(1,2,3))
print((lambda name:"hello"+name)("小明"))
add = lambda x,y : x+y
print(add(3,4))
input()
2.递归函数:
程序调用自身的编程技巧称为递归
递归函数:在函数内部调用自己的函数
递归函数要有结束条件,用于退出递归
def func(n):
if n ==1 or n==0 :
return 1
else:
return n*func(n-1)
print(func(5))
- 凡是可以使用递归实现的问题,使用循环也可以实现
- 使用递归可以写出简介的代码
- python递归的层数是有限制的(998层)
- 递归会消耗大量系统资源,执行效率较低
3.生成器函数:
- 在生成器函数中用yield关键字来返回数据
def func():
for i in range(65,92):
yield chr(i)
print(func()) #生成器对象
input()
- yield返回数据后,函数没有结束,只是暂停
- 生成器对象:生成器函数执行后的结果
next(生成器对象) ——> 值
for i in 生成器对象:
print(i)
gen = func (): #生成器对象
print(next(gen))
for i in gen:
print(i)
- 生成器的值是一个一个返回的
- 使用场景:处理大量数据,节省内存空间
**生成器–斐波那契 **
def ():
a,b=1,1
while True:
yield a #暂停执行,需要时再产生一个新元素
a,b = b, a+b #继续生成新元素
a=f()
for i in range(10):
print(next(a),end=' ')
4.高阶函数:
两个条件:
- 函数可以作为参数被传递
- 函数可以作为返回值输出
import math
def add(x,y,f):
reurn f(x)+f(y)
add(4,9,math.sqrt) #5.0
作用:让代码编写异常灵活
- 函数+"()"执行函数,结果是函数的返回值
- 定义好的函数,使用函数名调用,(函数对象)
- 将函数作为高阶参数时,不能加()
5.装饰器函数:
-
不修改其他函数代码
-
给其他函数增加或修改功能的函数
装饰器函数是高阶函数 -
它将原函数作为参数
-
一般在装饰器中需要定义一层或两层内部函数
-
原函数需要在装饰器内部的函数中执行
-
将内部函数作为返回值返回
log_info(function) :
def run(*args,**kwargs):
print("开始运行......")
res = function(*args,**kwargs)
print("运行结束......")
return res
return run
加装饰器,只需在函数的定义面前加上 @装饰器名称
使用多个装饰器时,可累加,添加到每个需要装饰的函数前
@log_info #装饰器函数 装饰器语法糖 func = log_info(func)
def func():
for i in range(10):
print(i)
print(func) #run()
@log_info
def add(x,y):
return x+y
print(add(1,2))
装饰器的应用场景:
- 给大量函数增加相同功能时使用
- 日志装饰器,测试装饰器,功能增强