1.高阶函数
-
所谓高阶函数就是使用一个或多个函数作为参数,或者是将函数作为返回值返回


-
map 是一个在 Python 里非常有用的高阶函数,它接受一个函数和一个序列(迭代器)作为输入然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果


2.闭包
- 将函数作为返回值也是高阶函数,也称之为闭包
- 闭包的好处
- 创建只有当前函数可以访问的变量
- 可以将一些私有数据隐藏到闭包中
- 形成闭包的条件
- 函数嵌套
- 将内部函数作为返回值返回
- 内部函数必须使用外部函数的变量

3.装饰器的引入
-
可以直接通过修改函数中的代码来完成需求,但是会产生以下的问题:
- 如果修改的函数多,这样的操作会非常麻烦
- 不便于后期维护
- 会违反开闭原则(OCP)
- 程序的设计,要求开发对程序的扩展,关闭对程序的修改
-
在之前的文章中看到过这样描述装饰器的话,很形象。
- 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办? 我们想到的一个办法就是把内裤改造一下,让它变得更厚更长,这样一来,它不仅有遮羞功能,还能提供保暖,不过有个问题,这个内裤被我们改造成了长裤后,虽然还有遮羞功能,但本质上它不再是一条真正的内裤了。于是聪明的人们发明长裤,在不影响内裤的前提下,直接把长裤套在了内裤外面,这样内裤还是内裤,有了长裤后宝宝再也不冷了。装饰器就像我们这里说的长裤,在不影响内裤作用的前提下,给我们的身子提供了保暖的功效。
4.装饰器的使用
- 通过装饰器,可以在不修改原函数的情况下对函数进行扩展
- 在开发中,可以通过装饰器来对函数进行扩展
先来个简单的装饰器


上面的例子传入的是无参数的函数。如果我们想要传入带参数的函数怎么办?
def add(a ,b):
return a + b
# print(a + b)
def fn():
print('Hello World')
def demo():
def new_func():
print('函数开始执行')
s = add(1, 20)
print('函数执行结束')
return s
return new_func()
r = demo()
print(r)
虽然传入了参数,但是函数还是自己手写的,这样很麻烦,有什么解决方法么?
def add(a ,b):
return a + b
# print(a + b)
def fn():
print('Hello World')
# 创立一个参数来接收想要传入的函数
def demo(old):
def new_func():
print('函数开始执行')
s = old(1, 2)
print('函数执行结束')
return s
return new_func()
r = demo(add)
这样依旧不太完美,add()函数需要参数,而fn()函数不需要参数,有需要对old进行修改,有什么好的解决方法么
def add(a ,b):
return a + b
# print(a + b)
def fn():
print('Hello World')
# 创立一个参数来接收想要传入的函数
def demo(old):
def new_func(*args, **kwargs):
print('函数开始执行')
s = old(*args, **kwargs)
print('函数执行结束')
return s
return new_func
r = demo(add)
f = r(555,666)
print(f)

本文深入探讨了Python中的高阶函数概念,包括闭包和装饰器的使用,解释了如何利用装饰器在不修改原函数的情况下进行功能扩展,提高了代码的可维护性和灵活性。
950

被折叠的 条评论
为什么被折叠?



