Python学习第十课
1. ⾼阶函数
1.1 满足高阶函数的条件:
- 接收函数作为参数
需要2个函数,一个函数是另一个函数的参数
def sum1(a): # 一个函数
for i in range(a):
a += i
return a
def hah(sn,a): # 另一个函数
new1 = []
for i in range(sn(a)):
if i % 3 == 0:
new1.append(i)
return new1
if __name__ == '__main__':
r = hah(sum1,10)
print(r)
- 将函数作为返回值返回的函数就是⾼阶函数
将一个函数(a)作为另一个函数(b)的返回值返回,那么b函数就是高阶函数
def fun(a, b): # a函数
c = a + b
return c
def tedd(func1, a, b): # b函数
result = func1(a,b)
return result
if __name__ == '__main__':
nx1 = tsdd(fun,10,90)
print(nx1)
# 还有一个例子是关于匿名函数用以构成的高阶函数
# 匿名函数:lambda函数 (无名函数)
# 语法: lambda 参数列表 :表达式
def test(a,b,func):
result = func(a,b)
return result
# lambda x,y:x+y 这部分就是匿名函数
num = test(11,22,lambda x,y:x+y)
print(num)
这是高阶函数的思想
2. 闭包
- 将函数作为返回值也是⾼阶函数我们也称为闭包
- 闭包的好处
- 通过闭包可以创建⼀些只有当前函数能访问的变量
- 可以将⼀些私有数据藏到闭包中
- ⾏成闭包的条件
- 函数嵌套
- 将内部函数作为返回值返回
内部函数必须要使⽤到外部函数的变量
3. 装饰器的引入
- 我们可以直接通过修改函数中的代码来完成需求,但是会产⽣以下⼀些问题
- 如果修改的函数多,修改起来会⽐较麻烦
- 不⽅便后期的维护
- 这样做会违反开闭原则(ocp)
- 程序的设计,要求开发对程序的扩展,要关闭对程序的修改
4. 装饰器的使用
- 通过装饰器,可以在不修改原来函数的情况下来对函数进⾏扩展
- 在开发中,我们都是通过装饰器来扩展函数的功能的
def fn(fun):
def new_fun(*args, **kwargs):
print('函数开始执行')
r = fun(*args, **kwargs)
print('函数执行结束')
return r
return new_fun
@fn
def speak():
print('同学们好好学习啊')
if __name__ == '__main__':
speak()
结果就是
5. 作业
用一个装饰器实现一个函数的运行时间所花费的时间
import time
def zsh(fun):
def gdc(a):
tst = time.time()
fun(a)
ten = time.time()
txx = ten - tst
print("函数执行时间为%s" % txx, "s")
return gdc
@zsh
def sum1(a):
for i in range(a):
i += i
print(i)
if __name__ == '__main__':
sum1(10000)
结果如下图: