"12.函数进阶-闭包装饰器" 在编程中,函数是代码组织的基本单元,而闭包和装饰器则是Python中高级函数概念的重要组成部分。在这篇文章中,我们将深入理解这两个概念。 ### 闭包 闭包是一种特殊的函数,它具有以下特点: 1. **闭包必须是个函数**:它本身是一个可调用的对象,能够执行特定任务。 2. **嵌套函数**:闭包通常存在于另一个函数内部,形成了函数的嵌套结构。 3. **使用外部作用域的变量**:闭包可以访问并操作其外部函数(非全局)的作用域中的变量。 4. **返回内部函数**:闭包的关键在于,外部函数需要返回内部函数的引用,而不是直接执行内部函数。 在Python中,闭包允许我们创建具有持久状态的函数,因为它们可以记住外部函数的作用域。这在处理局部状态或者封装变量时非常有用。下面是一个闭包的例子: ```python def outer(num): # 局部作用域 def inner(): nonlocal num num += 1 print(num) return inner rest = outer(11) rest() # 输出 12 ``` ### 装饰器 装饰器是Python中一个强大的工具,它允许我们修改或增强已有函数的功能,而无需改变函数的源代码或调用方式。装饰器的本质是一个接收函数作为参数并返回新函数的函数,通常利用闭包实现。 1. **利用闭包**:装饰器通常会创建一个闭包,以便在不改变原函数的情况下,为其添加额外的行为。 2. **函数对象**:装饰器接收函数作为输入,并返回一个新的函数,这个新函数在调用时会执行原函数的功能加上附加功能。 装饰器的主要应用场景包括日志记录、性能测试、缓存等。例如,下面是一个简单的装饰器示例,用于计算函数的运行时间: ```python import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__}运行时间为: {end_time - start_time}秒") return result return wrapper @timer_decorator def slow_function(n): time.sleep(n) return n * n slow_function(2) # 输出运行时间并执行函数 ``` 总结,闭包和装饰器都是Python中高级函数编程的重要概念。闭包通过捕获外部作用域的变量提供了持久化的局部状态,而装饰器则通过包装原有函数,使我们可以在不修改函数代码的情况下扩展其功能。两者结合使用,可以极大地提高代码的灵活性和可维护性。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 0
- 资源: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)