天天看點

python 參考手冊 第五章

循環加上數字索引

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__等語句