<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國際加速解決方案。 廣告
                ## 問題 你有一段通過下標訪問列表或者元組中元素的代碼,但是這樣有時候會使得你的代碼難以閱讀,于是你想通過名稱來訪問元素。 ## 解決方案 `collections.namedtuple()` 函數通過使用一個普通的元組對象來幫你解決這個問題。這個函數實際上是一個返回Python中標準元組類型子類的一個工廠方法。你需要傳遞一個類型名和你需要的字段給它,然后它就會返回一個類,你可以初始化這個類,為你定義的字段傳遞值等。代碼示例: >>> from collections import namedtuple >>> Subscriber = namedtuple('Subscriber', ['addr', 'joined']) >>> sub = Subscriber('jonesy@example.com', '2012-10-19') >>> sub Subscriber(addr='jonesy@example.com', joined='2012-10-19') >>> sub.addr 'jonesy@example.com' >>> sub.joined '2012-10-19' >>> 盡管namedtuple的實例看起來像一個普通的類實例,但是它跟元組類型是可交換的,支持所有的普通元組操作,比如索引和解壓。比如: >>> len(sub) 2 >>> addr, joined = sub >>> addr 'jonesy@example.com' >>> joined '2012-10-19' >>> 命名元組的一個主要用途是將你的代碼從下標操作中解脫出來。因此,如果你從數據庫調用中返回了一個很大的元組列表,通過下標去操作其中的元素,當你在表中添加了新的列的時候你的代碼可能就會出錯了。但是如果你使用了命名元組,那么就不會有這樣的顧慮。 為了說明清楚,下面是使用普通元組的代碼: def compute_cost(records): total = 0.0 for rec in records: total += rec[1] * rec[2] return total 下標操作通常會讓代碼表意不清晰,并且非常依賴記錄的結構。下面是使用命名元組的版本: from collections import namedtuple Stock = namedtuple('Stock', ['name', 'shares', 'price']) def compute_cost(records): total = 0.0 for rec in records: s = Stock(*rec) total += s.shares * s.price return total ## 討論 命名元組另一個用途就是作為字典的替代,因為字典存儲需要更多的內存空間。如果你需要構建一個非常大的包含字典的數據結構,那么使用命名元組會更加高效。但是需要注意的是,不像字典那樣,一個命名元組是不可更改的。比如: >>> s = Stock('ACME', 100, 123.45) >>> s Stock(name='ACME', shares=100, price=123.45) >>> s.shares = 75 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: can't set attribute >>> 如果你真的需要改變然后的屬性,那么可以使用命名元組實例的 `_replace()` 方法, 它會創建一個全新的命名元組并將對應的字段用新的值取代。比如: >>> s = s._replace(shares=75) >>> s Stock(name='ACME', shares=75, price=123.45) >>> `_replace()` 方法還有一個很有用的特性就是當你的命名元組擁有可選或者缺失字段時候,它是一個非常方便的填充數據的方法。你可以先創建一個包含缺省值的原型元組,然后使用 `_replace()` 方法創建新的值被更新過的實例。比如: from collections import namedtuple Stock = namedtuple('Stock', ['name', 'shares', 'price', 'date', 'time']) # Create a prototype instance stock_prototype = Stock('', 0, 0.0, None, None) # Function to convert a dictionary to a Stock def dict_to_stock(s): return stock_prototype._replace(**s) 下面是它的使用方法: >>> a = {'name': 'ACME', 'shares': 100, 'price': 123.45} >>> dict_to_stock(a) Stock(name='ACME', shares=100, price=123.45, date=None, time=None) >>> b = {'name': 'ACME', 'shares': 100, 'price': 123.45, 'date': '12/17/2012'} >>> dict_to_stock(b) Stock(name='ACME', shares=100, price=123.45, date='12/17/2012', time=None) >>> 最后要說的是,如果你的目標是定義一個需要更新很多實例屬性的高效數據結構,那么命名元組并不是你的最佳選擇。這時候你應該考慮定義一個包含 `__slots__` 方法的類(參考8.4小節)。
                  <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>

                              哎呀哎呀视频在线观看