最近出差有点自己的空闲时间,于是这些日子又把Python的学习捡起来了。之前大四做毕设和大创的时候用过一点Python2,也不知道再捡起来是否顺利。
前两天在看一个用urllib库写爬虫的Demo的时候,看到了下面这一段代码:
with request.urlopen(oriurl) as response:
for line in response:
line = line.decode("utf-8") # Decoding the binary data to text.
if 'EST' in line or 'EDT' in line: # look for Eastern Time
print(line)
咦,这with...as是个什么东西?官方Document查起来!
关于with语句的执行过程,官方Document的相关章节描述如下:
带有一个“项目”的with语句的执行过程如下:
- 对上下文表达式(在with_item中给出的表达式)求值以获得一个上下文管理器。
- 载入上下文管理器的__enter__()以便后续使用。
- 载入上下文管理器的__exit__()以便后续使用。
- 发起调用上下文管理器的__enter__()方法。
- 如果with语句中包含一个目标,来自__enter__()的返回值将被赋值给它。
- 执行语句体。
- 发起调用上下文管理器的__exit()__方法。如果语句体的退出是由异常导致的,则其类型、值和回溯信息将被作为参数传递给__exit()__()。否则的话,将提供三个None参数。