Python (1) 关于 Enumerate; with...as...

1. Enumerate

关于这个函数,python的在线文档是这样的:

Enumerate is a built-in function of Python. It’s usefulness can not be summarized in a single line. Yet most of the newcomers and even some advanced programmers are unaware of it. It allows us to loop over something and have an automatic counter. Here is an example:

for counter, value in enumerate(some_list): 
  print(counter, value)
my_list = ['apple', 'banana', 'grapes', 'pear']
for c, value in enumerate(my_list, 1): 
  print(c, value)

# Output:
# 1 apple
# 2 banana
# 3 grapes
# 4 pear

2. with... as...

这里引一段别人的博客,讲的很清楚了:

Python (1) 关于 Enumerate; with...as..._第1张图片
Screenshot from 2016-12-07 20:09:14.png

术语
要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。
下面是一组与上下文管理器和with 语句有关的概念。
上下文管理协议(Context Management Protocol):包含方法 enter() 和 exit(),支持
该协议的对象要实现这两个方法。
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了
enter() 和 exit() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,
负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,
也可以通过直接调用其方法来使用。
运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 enter() 和
exit() 方法实现,enter() 方法在语句体执行之前进入运行时上下文,exit() 在
语句体执行完后从运行时上下文退出。with 语句支持运行时上下文这一概念。
上下文表达式(Context Expression):with 语句中跟在关键字 with 之后的表达式,该表达式
要返回一个上下文管理器对象。
语句体(with-body):with 语句包裹起来的代码块,在执行语句体之前会调用上下文管
理器的 enter() 方法,执行完语句体之后会执行 exit() 方法。


with 语句的语法格式如下

  • with 语句的语法格式
    with context_expression [as target(s)]:
    with-body
    这里 context_expression 要返回一个上下文管理器对象,该对象并不赋值给 as 子句中的 target(s) ,如果指定了 as 子句的话,会将上下文管理器的 enter() 方法的返回值赋值给 target(s)。target(s) 可以是单个变量,或者由“()”括起来的元组(不能是仅仅由“,”分隔的变量列表,必须加“()”)。
    Python 对一些内建对象进行改进,加入了对上下文管理器的支持,可以用于 with 语句中,比如可以自动关闭文件、线程锁的自动获取和释放等。假设要对一个文件进行操作,使用 with 语句可以有如下代码:
  • 使用 with 语句操作文件对象
with open(r'somefileName') as somefile: 
    for line in somefile: 
      print line 
      # ...more code

这里使用了 with 语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭了打开的文件句柄。如果使用传统的 try/finally 范式,则要使用类似如下代码:

  • try/finally 方式操作文件对象
somefile = open(r'somefileName') 
try: 
    for line in somefile: 
      print line # ...more code 
finally: 
    somefile.close()

引用:
[1] https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/
[2] http://book.pythontips.com/en/latest/enumerate.html

你可能感兴趣的:(Python (1) 关于 Enumerate; with...as...)