本专题的内容结构:
unit1:精进的Python语法:
(1),上下文管理器:
上下文Conteext:程序执行中的某个状态
>程序执行所需的一些内外部参数,构成了程序运行时状态
>上下文是用来表达程序运行状态的概念,对应内存状态
>上下文是程序中断保留或恢复运行的重要状态信息
上下文管理器:一个可以在程序中加载独立上下文的对象
>万物皆对象:上下文管理器也是一个对象,管理着一个独立上下文区域
简单说就是在程序中可以停止程序,运行程序的对象
>上下文管理器使用with 显示创建
>进入和退出分别对应 __enter__() 和__exit__() 方法
简单实例:用它来管理文件的操作:
with open("python123.txt",'r') as f:
for line in f:
print(line)
>with结束后,文件被自动关闭
也可以打开多个文件:
with open("a.txt",'r') as fi,open("b.txt",'w') as fo:
for line in fi:
fo.write(line)
>with 结束后,两个文件都会被关闭
因为进入(__enter__())时操作的是打开文件,所以离开时,会关闭这个操作
自定义上下文管理器:
class DemoClass:
def __init__(self,name):
self.name= name
def __enter__(self):
print("进入上下文管理器")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("退出上下文管理器")
def run(self):
print("DemoClass 的某个实例对象在运行")
with DemoClass("python123") as d:
d.run()
输出:
进入上下文管理器
DemoClass 的某个实例对象在运行
退出上下文管理器
注:如何使用上下文管理器:
>1,with要配合特定对象使用
>2,Python支持:
file,
decimal.Context,
thread.LockType,
threading.Lock,
threading.RLock,
threading.Condition,
threading.Semaphore,
threading.BoundedSempahore
>用户也可自定义对象
自定义的open类:
class MyOpenClass:
def __init__(self,name,mode):
self.name= name
self.mode= mode
def __enter__(self):
print("进入上下文管理器")
if self.mode == 'r':
self.f = open(self.name,self.mode)
else:
self.f= open(self.name,self.mode)
return self #重点,要将self, 它返回的就是as 后面的那个
def __exit__(self, exc_type, exc_val, exc_tb):
self.f.close()
print("退出上下文管理器")
def read(self):
return self.f.read()
def write(self,s):
self.f.write(s)
with MyOpenClass("d:/test.txt",'r') as f1,MyOpenClass("d:/test02.txt",'w') as f2:
txt = f1.read() #从f1中读
print(txt)
f2.write(txt) # 写到f2中去
(2),迭代器类型:
迭代器类型 Iterator Types :实现容器中元素的迭代:
>Container:包含一组元素的数据类型,如 全部组合数据类型
>迭代器:容器之上的