<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 基于生成器的實現 # 基于生成器的實現 我們還可以基于裝飾器(decorators)和生成器(generators)來實現上下文管理器。 Python有個`contextlib`模塊專門用于這個目的。我們可以使用一個生成器函數來實現一個上下文管理器,而不是使用一個類。 讓我們看看一個基本的,沒用的例子: ~~~ from contextlib import contextmanager @contextmanager def open_file(name): f = open(name, 'w') yield f f.close() ~~~ OK啦!這個實現方式看起來更加直觀和簡單。然而,這個方法需要關于生成器、`yield`和裝飾器的一些額外知識。在這個例子中我們還沒有捕捉可能產生的任何異常。它的工作方式和之前的方法是大部分相同的。 讓我們小小地剖析下這個方法。 1. Python解釋器遇到了`yield`關鍵字。因為這個緣故它創建了一個生成器而不是一個普通的函數。 1. 因為這個裝飾器,`contextmanager`會被調用并傳入函數名(`open_file`)作為參數。 1. `contextmanager`函數返回一個以`GeneratorContextManager`對象封裝過的生成器。 1. 這個`GeneratorContextManager`被賦值給`open_file`函數,我們實際上是在調用`GeneratorContextManager`對象。 那現在我們既然知道了所有這些,我們可以用這個新生成的上下文管理器了,像這樣: ~~~ with open_file('some_file') as f: f.write('hola!') ~~~
                  <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>

                              哎呀哎呀视频在线观看