python 中的yield

一直也不會用yield, 今天學習學習。 python

 def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 
        a, b = b, a + b 
        n = n + 1


當函數中有yield時, 此時函數就不是函數了,而是一個生成器,yield有點像return, 但不是跳出函數,而是返回一個迭代值。 函數

 >>> for n in fab(5): 
 ...     print n

函數的用法是這樣, 當循環的時候, 執行到yield,會返回一個值, 下一次循環的時候會從yield的下一條數據開始執行, 直到遇到yield,循環下去。 學習

 >>> f = fab(5) 
 >>> f.next() 
 1

固然也能夠這樣調用。 大數據


若是沒有return,函數會執行至完畢,若是有return,則直接拋出 StopIteration 終止迭代。 spa

 def read_file(fpath): 
    BLOCK_SIZE = 1024 
    with open(fpath, 'rb') as f: 
        while True: 
            block = f.read(BLOCK_SIZE) 
            if block: 
                yield block 
            else: 
                return

讀取大數據會有用。 code

返回時間段
it

import datetime

def main(start, end):
    start_time = datetime.datetime.strptime(start, "%Y-%m-%d")
    end_time = datetime.datetime.strptime(end, "%Y-%m-%d")

    while start_time <= end_time:
        yield start_time
        start_time += datetime.timedelta(days=1)

if __name__ == '__main__':
    for i in main('2013-02-01', '2013-02-28'):
        print i, type(i)
相關文章
相關標籤/搜索