1. 高阶函数
- 接收函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
- 列:
"""
高级函数:
1.接收一个或多个函数作为参数
2.将函数作为返回值返回
"""
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def fn2(i):
if i % 2 == 0:
return True
return False
def fn3(i):
if i > 5:
return True
return False
def fn4(i):
if i % 3 == 0:
return True
return False
def fn(func, lst):
new_lst = []
for n in lst:
if func(n):
new_lst.append(n)
return new_lst
print(fn(fn4, lst))
print(fn(fn3, lst))
print(fn(fn2, lst))
2. 闭包
- 将函数作为返回值也是高阶函数我们也称为闭包
- 闭包的好处
- 通过闭包可以创建一些只有当前函数能访问的变量
- 可以将一些私有数据藏到闭包中
- 行成闭包的条件
- 函数嵌套
- 将内部函数作为返回值返回
- 内部函数必须要使用到外部函数的变量
- 列:
"""
闭包:
将函数作为返回值返回,称为闭包
通过闭包可以创建一些只有当前函数能访问的变量
可以将一些私有数据藏到闭包中
"""
def fn():
a = 10
def fn2():
print('I love You', a)
return fn2
r = fn()
print(r())
"""
形成闭包的条件:
1.函数嵌套
2.将内部函数作为返回值返回
3.内部函数必须要使用到外部函数的变量
"""
3. 装饰器的引入
- 我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
- 如果修改的函数多,修改起来会比较麻烦
- 不方便后期的维护
- 这样做会违反开闭原则(ocp)
- 程序的设计,要求开发对程序的扩展,要关闭对程序的修改
4. 装饰器的使用
- 通过装饰器,可以在不修改原来函数的情况下来对函数进行扩展
- 在开发中,我们都是通过装饰器来扩展函数的功能的
- 列:
"""
装饰器的引入:
我们可以直接通过修改函数中的代码来完成需求,但是会产生一些问题
1.如果要修改的函数比较多,修改起来比较麻烦
2.不方便后期维护
3.违反 开闭原则(OCP) 程序的设计 要求开发对程序的扩展,要关闭对程序的修改
"""
def fn():
print('我是fn函数')
def add(a, b):
return a + b
def start_end(old):
"""
用来对其他的函数进行扩展 扩展函数的执行的时候 打印 开始执行 执行后 打印执行结束
:param old: 要扩展的函数
:return:
"""
def new_function(*args, **kwargs):
print('开始执行')
result = old(*args, **kwargs)
print('执行结束')
return result
return new_function
f = start_end(add)
r = f(555, 890)
print(r)
"""
亦可如此调用
"""
@start_end
def speak():
print('大家加油')
speak()