yield的使用

參考:python

http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/函數

http://blog.csdn.net/alvine008/article/details/43410079工具

在函數fun實現中,若是使用yield,那麼函數返回值就是一個generator,用於迭代。迭代的next隱含在for 循環中,每次next,fun就相似產生一箇中斷,返回yield後面的語句。spa

 

def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 不是很好,若是返回值要使用,就不行了
        # 若是用list保存,浪費資源
        a, b = b, a + b 
        n = n + 1

if __name__ == '__main__':
    for n in fab(5): 
        print n

 

說明:.net

(1)含有yield的函數A的返回值,能夠做爲入參傳遞給函數B中for循環處理,函數B中同時也能夠含有yield,返回值繼續做爲參數給函數C處理……………….。例如:開發一個工具,讀pcap報文,對長度超過1000的報文分片,那麼,讀報文函數read_pkt中可用yield,分片處理frag_pkt中也可使用yield,最後的寫結果 write_ret可使用 fag_pkt的返回直接寫結果,整個流程就是:read_pkt---frag_pkt---write_ret的順序調用,很簡介!!!設計

(2)好處,一系列含有yield的函數,在前後順序的流水線上處理,前一函數的輸出(yield),不須要定義對象來保存輸出結果,使用yield後的返回值,能夠繼續傳遞給下一個函數,總體設計更加簡潔高效。code

(3)對有 yield函數的返回值,for循環變量完成後,不能再進行for循環遍歷!!!!!對象

相關文章
相關標籤/搜索