<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 協程 # 23. 協程 Python中的協程和生成器很相似但又稍有不同。主要區別在于: - 生成器是數據的生產者 - 協程則是數據的消費者 首先我們先來回顧下生成器的創建過程。我們可以這樣去創建一個生成器: ~~~ def fib(): a, b = 0, 1 while True: yield a a, b = b, a+b ~~~ 然后我們經常在`for`循環中這樣使用它: ~~~ for i in fib(): print i ~~~ 這樣做不僅快而且不會給內存帶來壓力,因為我們所需要的值都是動態生成的而不是將他們存儲在一個列表中。更概括的說如果現在我們在上面的例子中使用`yield`便可獲得了一個協程。協程會消費掉發送給它的值。Python實現的`grep`就是個很好的例子: ~~~ def grep(pattern): print("Searching for", parttern) while True: line = (yield) if pattern in line: print(line) ~~~ 等等!`yield`返回了什么?啊哈,我們已經把它變成了一個協程。它將不再包含任何初始值,相反要從外部傳值給它。我們可以通過`send()`方法向它傳值。這有個例子: ~~~ search = grep('coroutine') next(search) #output: Searching for coroutine search.send("I love you") search.send("Don't you love me?") search.send("I love coroutine instead!") #output: I love coroutine instead! ~~~ 發送的值會被`yield`接收。我們為什么要運行`next()`方法呢?這樣做正是為了啟動一個協程。就像協程中包含的生成器并不是立刻執行,而是通過`next()`方法來響應`send()`方法。因此,你必須通過`next()`方法來執行`yield`表達式。 我們可以通過調用`close()`方法來關閉一個協程。像這樣: ~~~ search = grep('coroutine') search.close() ~~~ 更多協程相關知識的學習大家可以參考David Beazley的這份[精彩演講](http://www.dabeaz.com/coroutines/Coroutines.pdf)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看