python__210727_01
函数与命名空间
- 函数的全局命名空间始终是定义该函数的模块,而不是调用该函数的命名空间。因此,在函数中引用的全局变量始终是定义该函数模块的全局变量
- 要分清函数全局命名空间(定义的模块)与引用的模块之间的关系
闭包及其应用
- 闭包是指 Python语言中将组成函数的语句和这些语句的执行环境打包到一起所得到的对象
- 当使用嵌套函数(函数中定义函数)时,闭包将捕获内部函数执行所需要的整个环境。此外,嵌套的函数可以使用被嵌套函数中的任何变量,就像普通函数可以引用全局变量一样,而不需要通过参数引入
- 闭包可以实现先将参数传递给一个函数,而并不立即执行,以达到延迟求值的目的,所谓延迟求值,就是函数返回一个函数,而真正需要运行函数中的代码时,其本质还是函数调用
闭包与泛型函数
闭包的应用除了在装饰器和延迟求值之外,还可以利用其特性来定义不同的泛型函数。利用嵌套函数持有定义环境变量的特性来完成功能的
上下文管理器
- 上下文管理器是指实现上下文管理协议方法的对象,主要用于安全的释放资源(如打开的文件、数据库连接或网络连接、对对象的锁定)
- 对于上下文管理器对象可以使用with语句来使用它,在with语句中可以使用上下文管理器管理或者提供资源,当退出with语句时,由上下文管理器来负责安全的释放资源
- 上下文管理器的协议方法有以下两个:
- enter(self) 是进入上下文时调用的,创建并返回一个可以引用的资源对象,供with语句块中的程序使用
- exit(self,type,value,tb) 是退出上下文调用的,主要用来安全的释放资源对象。方法中的参数type、value、tb用于追踪退出错误时发生的错误类型、值和跟踪信息
- 使用上下文管理器的with语句的形式为:
with content as var:
pass
其中的变量var
将取得上下文管理器的__enter__(self)方法所返回的资源引用,供with后的代码块中使用
上下文管理器的作用是方便资源管理的一种语法形式
用字符串操作对象属性
在Python中的内建函数中有两个函数:hasattr()和setattr()
- 通过 hasattr()可以测试某个对象是否具有某个属性,原型如下:
hasattr(object,name)
- object 被测试的对象(类或者函数)
- name 属性名(字符串格式)
setattr(object,name,value)
- object 要设置的对象,类或者函数
- name 要设置的属性名(字符串格式)
- value 要设置的属性值
- 这些操作只有在编写框架或者特殊的情况下,才会使用在一般的编程中,应尽量通过调用类的方法来操作类的数据
用字典构造分支程序
在编程语言中,函数也是对象,而且是顶层对象,可以作为参数传入并调用的。因此,可以把函数作为数据项放入字典中,并以键值来作为调用(分支)的标志