Python高级疯狂讲义v4.5_20181104-746-876.pdf
根据提供的文档信息,这里主要涉及的是Python中的几个高级主题,包括闭包(Closure)、装饰器(Decorator)以及类装饰器的应用。接下来,我们将对这些概念进行详细的解释,并结合示例代码来深入理解。 ### 一、闭包(Closure) 闭包是一种特殊的函数,它可以记住并访问其创建时的作用域中的变量,即使该函数在其创建的作用域之外执行也是如此。这种特性使得闭包非常强大,可以用来封装状态或实现私有变量等。 #### 特点: 1. **内部函数**:闭包是由一个内部函数组成的。 2. **引用外部变量**:内部函数可以引用定义它的外部函数的局部变量。 3. **外部函数返回内部函数**:外部函数必须返回内部函数。 #### 示例代码分析: ```python def test_arg(s="hello"): def function_out(func): def function_in(a): print("正在进行验证.,a=",a,s) return func(a) return function_in return function_out @test_arg("loginxx") def login(a): print("---开始登录---,a=",a) return a # 调用login函数, 实质上调用function_in --> login result = login(10) print("result=", result) ``` 这段代码中,`test_arg` 是一个返回闭包的函数。闭包 `function_out` 包含了一个内部函数 `function_in`,并且 `function_out` 返回了 `function_in`。`function_in` 可以访问到外部函数 `test_arg` 的参数 `s`。通过使用 `@test_arg("loginxx")` 这种装饰器语法,我们实际上是在 `login` 函数上调用了闭包。 ### 二、装饰器(Decorator) 装饰器是一种设计模式,用于在不修改原始函数代码的情况下增加额外的功能。装饰器本身是一个接受函数作为参数的函数,并返回一个新的函数。 #### 用途场景: 1. **日志记录**:记录函数的调用时间和参数等。 2. **权限验证**:验证用户是否有权限执行某个函数。 3. **计时器**:测量函数执行时间。 #### 示例代码分析: ```python def makeBlod(func): def wrapped(): return "<b>" + func() + "</b>" return wrapped @makeBlod def test1(): return "helloworld-1" print(test1()) ``` 这个例子中,`makeBlod` 是一个装饰器函数,它接受一个函数 `func` 作为参数,并返回一个新的函数 `wrapped`。`@makeBlod` 语法应用于 `test1` 函数,这意味着 `test1` 现在会返回经过装饰器处理后的结果。 ### 三、多重装饰器 当一个函数被多个装饰器装饰时,装饰器的执行顺序是自下而上的。也就是说,最接近被装饰函数的装饰器最后被执行。 #### 示例代码分析: ```python def makeBlod(func): def wrapped(): return "<b>" + func() + "</b>" return wrapped def makeItalic(func): def wrapped(): return "<I>" + func() + "</I>" return wrapped @makeBlod @makeItalic def test3(): return "helloworld-3" print(test3()) ``` 在这个例子中,`test3` 先被 `makeItalic` 装饰,然后再被 `makeBlod` 装饰。因此,输出结果是 `<b><I>helloworld-3</I></b>`。 ### 四、类装饰器 类装饰器是装饰器的一种变体,它们是类而不是函数,但仍然遵循相同的接口约定。类装饰器通常包含一个 `__call__` 方法,这个方法会被调用以执行装饰逻辑。 #### 示例代码分析: 虽然文档中没有给出具体的类装饰器示例,但我们可以想象一个简单的类装饰器如下所示: ```python class MyDecorator: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print("Before function call.") result = self.func(*args, **kwargs) print("After function call.") return result @MyDecorator def say_hello(name): print(f"Hello, {name}!") say_hello("World") ``` 在这个例子中,`MyDecorator` 类充当了一个装饰器。当 `@MyDecorator` 应用于 `say_hello` 函数时,`say_hello` 实际上变成了 `MyDecorator(say_hello)` 的实例,并且 `__call__` 方法会在调用 `say_hello` 时被调用。 以上就是从给定的文档信息中提取的关键知识点,包括闭包、装饰器及其应用场景、多重装饰器以及类装饰器的基本介绍和示例分析。这些知识点对于理解和应用Python的高级功能至关重要。




























剩余130页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 嵌入式系统复习题1.doc
- 沁阳市第一中学多媒体设备及计算机设备采购项目.doc
- 肯德基网络营销策划分析ppt课件.ppt
- 有答案的《工程项目管理》复习题.doc
- 石油总公司中下游工程建设项目管理规定教材.doc
- 某自动化股份公司IEC61850技术培训.pptx
- 云计算建设方案样本.doc
- 工程网络计划网络图.ppt
- 数学建模网络赛特等奖土地储备风险评估方案.doc
- 网络故障分析报告.pdf
- 李宁电子商务方案解读.ppt
- 网络时间协议简介.doc
- (源码)基于C++的Vive Lighthouse室内定位传感器系统.zip
- 两个开挂的Excel同步数据到Word技巧!(联动)get√.pdf
- 智慧城市建设带动实体经济发展.docx
- 三级网络第一章的重点(最新整理).pdf


