循环加上数字索引
for i,x in enumerate(s):
statements
zip()的用法:
for x,y in zip(s,t):#一次性生成元祖列表
statements
for x,y in itertools.zip(s,t):#一次生成一个元祖
statements
continue 和break 只是应用于正在执行的最内层循环,跳出多层循环,可以使用异常。
continue对于处理文本时跳过空行很实用。
异常程序可以同时捕捉多个异常
try:
do something
except (IOError, TypeError, NameError) as e:
#处理错误
定义新异常
class DeviceError(Exception):
def __init__(self,errno,msg):
self.args = (errno, msg)
self.errno = errno
self.errmsg = msg
with语句需要对象支持上下文管理协议(__enter__() 和__exit__() )
class ListTransaction(object):
def __init__(self,thelist):
self.thelist = thelist
def __enter__(self):
self.workingcopy = list(self.thelist)
return self.workingcopy
def __exit__(self):
if type is None:
self.thelist[:] = self.workingcopy
return False
通过包装生成器 contextlib 实现上下文管理器
from contextlib import contextmanager
@contextmanager
def ListTransaction(thelist):
workingcopy = list(thelist)
yield workingcopy
thelist[:]=workingcopy
__debug__ assert 和 python -O选项
-O选项可以忽略assert ,if __debug__等语句