<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 問題 你想定義一個生成器函數,但是它會調用某個你想暴露給用戶使用的外部狀態值。 ## 解決方案 如果你想讓你的生成器暴露外部狀態給用戶,別忘了你可以簡單的將它實現為一個類,然后把生成器函數放到__iter__()方法中過去。比如: from collections import deque class linehistory: def __init__(self, lines, histlen=3): self.lines = lines self.history = deque(maxlen=histlen) def __iter__(self): for lineno, line in enumerate(self.lines, 1): self.history.append((lineno, line)) yield line def clear(self): self.history.clear() 為了使用這個類,你可以將它當做是一個普通的生成器函數。然而,由于可以創建一個實例對象,于是你可以訪問內部屬性值,比如 `history` 屬性或者是 `clear()` 方法。代碼示例如下: with open('somefile.txt') as f: lines = linehistory(f) for line in lines: if 'python' in line: for lineno, hline in lines.history: print('{}:{}'.format(lineno, hline), end='') ## 討論 關于生成器,很容易掉進函數無所不能的陷阱。如果生成器函數需要跟你的程序其他部分打交道的話(比如暴露屬性值,允許通過方法調用來控制等等),可能會導致你的代碼異常的復雜。如果是這種情況的話,可以考慮使用上面介紹的定義類的方式。在 `__iter__()` 方法中定義你的生成器不會改變你任何的算法邏輯。由于它是類的一部分,所以允許你定義各種屬性和方法來供用戶使用。 一個需要注意的小地方是,如果你在迭代操作時不使用for循環語句,那么你得先調用 `iter()` 函數。比如: >>> f = open('somefile.txt') >>> lines = linehistory(f) >>> next(lines) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'linehistory' object is not an iterator >>> # Call iter() first, then start iterating >>> it = iter(lines) >>> next(it) 'hello world\n' >>> next(it) 'this is a test\n' >>>
                  <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>

                              哎呀哎呀视频在线观看