流畅的python第七章函数装饰器和闭包学习记录
本章讨论的话题
python如何计算装饰器句法
python如何判断变量是不是局部的(通过函数内部是否给变量赋值过来判断是否是局部变量)
闭包存在的原因和工作原理(闭包是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定。函数中的函数)
nonlocal能解决什么问题(nonlocal是新出现的保留关键字,python3.0中引入)(将局部变量声明为自由变量)
探讨
实现行为良好的装饰器
标准库中有用的装饰器
实现一个参数化的装饰器
装饰器的基础知识
装饰器是可调用的对象,其参数是另一个函数即被装饰的函数,装饰器可能会处理被装饰的函数,然后将它发返回,或者将其替换成另一个函数或可调用对象。
@decorate def target(): print("running target()") 以上方法效果同下 def target(): print("running target()") target = decorate(target)
装饰器的一个特性是能把被装饰的函数替换成其他函数,第二个特性是,装饰器在加载模块是立即执行。
装饰器通常在一个模块中定义,然后应用到其他模块的函数上,并且会在内部定义一个函数,然后将其返回
变量作用域规则
在上面的例子中我们定义了一个全局变量b,在函数中给b赋值,导致python判断b是局部变量,我们只定义了全局变量b,没有定义局部变量b,所以报错。可以通过使用global关键词将b当成全局变量
LOAD_GLOBAL加载全局变量,LOAD_FAST加载局部变量
闭包
闭包指的是延伸了作用域的函数,其中包含函数定义体中引用,但是不在定义体中定义的非全局变量。函数是不是匿名的没有关系,关键是能访问定义体之外的非全局变量
综上,闭包是一种函数,它会保留定义函数是存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定。
nonloal声明
函数中的局部变量,虽然可以被函数中的函数使用,但是如果使用了赋值语句,就需要将该局部变量定义成自由变量,nonloal的作用就是把变量标记为自由变量。
Python2中没有nonlocal但是可以通过将声明一个变量指向局部变量来对其赋值
实现简单的装饰器
标准库中的装饰器
python内置了三个用于装饰方法的函数,property,clasmethod和staticmethod
另一个常见的装饰器是functools.wraps,作用是协助构建行为良好的装饰器。
单分派泛函数
叠放装饰器
使用两个或者多个装饰器
参数化装饰器
相关文章
- Head First Python 学习笔记-Chapter3:文件读取和异常处理
- python通过input()函数输入的内容是什么类型
- 深度学习部署C++和python的交互,不同编程语言的交互
- python null类型
- Python 文件学习笔记之 File(文件) 对象常用函数
- 新手小白的Python入门指南(完整版)
- 【Python学习实践教程】10个Python经典项目实战,练手必备
- 如果我学会python,我能做些什么?
- 学习Python的第十一节课(构造函数和析构函数、静态方法和类方法)
- python学习之利用format()或zfill()函数对数据进行编号排序的应用
- Python零基础好学吗?零基础如何学习Python?
- 零基础怎么转行IT ?为什么要学习python?(下)
- 「基于Python技术的智慧中医商业项目」基于机器学习的Django问诊系统展示
- Python数据可视化 Pyecharts 制作 WordCloud 词云图
- (数据科学学习手札101)funcy:Python中的函数式编程百宝箱
- 对线性模型进行最小二乘法学习的实例(使用三角多项式基函数 Python实现)
- 14、时间空间效率的平衡——两个链表的第一个公共点(python版)
- Python学习--Selenium模块简单介绍(1)
- Python学习---Django的新工程设置模板
- Python学习---Django的基础操作180116
- 学习笔记(59):Python实战编程-Graphics
- Python入门学习笔记第八章——函数~~~