Python如何將名稱對應到序列的元素中(程式碼)
這篇文章帶給大家的內容是關於Python如何將名稱映射到序列的元素中(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1、需求
我們的程式碼是透過位置(即索引或下標)來存取清單會元組的,但有時候這會讓程式碼變得有些難以閱讀。我們希望可以透過名稱來存取元素,以此減少結構中對位置的依賴性。2、解決方案
比起普通的元組,collections.namedtuple()(命名元組)只增加了極少的開銷就提供了這些便利。實際上collections.namedtuple()是一個工廠方法,它回傳的是Python中標準元組類型的子類別。我們提供給它一個類型名稱以及對應的字段,它就傳回一個可實例化的類別、為你已經定義好的字段傳入值等。
from collections import namedtuple Subscriber=namedtuple('Subsciber',['addr','joined']) sub=Subscriber("1782980833@qq.com","2018-10-23") print(sub) print(sub.addr) print(sub.joined) print(len(sub)) addr,joined=sub print(addr) print(joined) #下面错误,以为你namedtuple是不可变的 #sub.joined="2019"
結果:
Subsciber(addr='1782980833@qq.com', joined='2018-10-23') 1782980833@qq.com 2018-10-23 2 1782980833@qq.com 2018-10-23
儘管namedtuple的實例看起來就像一個普通的類別實例,但它的實例與普通的元組是可互換的,而且支援所有普通元組所支援的操作。
命名元組的主要作用在於將程式碼同它所控制的元素位置間解耦。所以,如果從資料庫呼叫中得到了一個大型的元組列表,而且透過元素的位置來存取元素,那麼假如在表單中新增了一列數據,那麼程式碼就會崩潰,但如果首先將返回的元組轉換為命名元組,就不會有問題。
為了說明這個問題,以下有一些使用普通元組的程式碼:
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
3、分析
namedtuple的一種可能用法是作為字典的替代,後者需要更多的空間來儲存。因此,如果要建立設計字典的大型數據,使用namedtuple會更加高效,但是請注意,與字典不同的是,namedtuple是不可變的。
如果需要修改任何屬性,可以透過使用namedtuple實例_replace()方法來實現。此方法會建立一個全新的命名元組,並對對應的值做替換。
from collections import namedtuple Subscriber=namedtuple('Subsciber',['addr','joined']) sub=Subscriber("1782980833@qq.com","2018-10-23") print(sub) sub=sub._replace(joined="2018-10-24") print(sub)
結果:
Subsciber(addr='1782980833@qq.com', joined='2018-10-23') Subsciber(addr='1782980833@qq.com', joined='2018-10-24')
_replace()方法有一個微妙的用途,那就是它可以作為一種簡單的方法填充具有可選或缺失字段的命名元組。要做到這一點,先建立一個包含預設值得原型數組,然後使用_replace()方法建立一個新的實例,把對應的值替換掉。
from collections import namedtuple Subscriber=namedtuple('Subsciber',['addr','joined','age']) sub=Subscriber("",None,0) def dict_to_stock(s): return sub._replace(**s) a={"addr":"111111@qq.com","joined":"1111-11-11","age":11} a=dict_to_stock(a) print(a) b={"addr":"111111@qq.com","joined":"1111-11-11"} b=dict_to_stock(b) print(b)
結果:
Subsciber(addr='111111@qq.com', joined='1111-11-11', age=11) Subsciber(addr='111111@qq.com', joined='1111-11-11', age=0)
最後,也是相當重要的是,應該要注意如果我們的目標是定義一個高效的資料結構,而且將來會修改各種實例屬性,那麼使用namedtuple並不是最佳選擇,相反,可以考慮頂一個使用了__slots__屬性的類別。
#以上是Python如何將名稱對應到序列的元素中(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

首先定義一個包含姓名、郵箱和消息字段的ContactForm表單;2.在視圖中通過判斷POST請求處理表單提交,驗證通過後獲取cleaned_data並返迴響應,否則渲染空表單;3.在模板中使用{{form.as_p}}渲染字段並添加{%csrf_token%}防止CSRF攻擊;4.配置URL路由將/contact/指向contact_view視圖;使用ModelForm可直接關聯模型實現數據保存,DjangoForms實現了數據驗證、HTML渲染與錯誤提示的一體化處理,適合快速開發安全的表單功

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗證或Windows身份驗證;3.查看已安裝驅動:運行pyodbc.drivers()並篩選含'SQLServer'的驅動名,確保使用如'ODBCDriver17forSQLServer'等正確驅動名稱;4.連接字符串關鍵參數

shutil.rmtree()是Python中用於遞歸刪除整個目錄樹的函數,能刪除指定文件夾及其所有內容。 1.基本用法:使用shutil.rmtree(path)刪除目錄,需處理FileNotFoundError、PermissionError等異常。 2.實際應用:可一鍵清除包含子目錄和文件的文件夾,如臨時數據或緩存目錄。 3.注意事項:刪除操作不可恢復;路徑不存在時拋出FileNotFoundError;可能因權限或文件佔用導致失敗。 4.可選參數:可通過ignore_errors=True忽略錯

統計套利簡介統計套利是一種基於數學模型在金融市場中捕捉價格錯配的交易方式。其核心理念源於均值回歸,即資產價格在短期內可能偏離長期趨勢,但最終會回歸其歷史平均水平。交易者利用統計方法分析資產之間的關聯性,尋找那些通常同步變動的資產組合。當這些資產的價格關係出現異常偏離時,便產生套利機會。在加密貨幣市場,統計套利尤為盛行,主要得益於市場本身的低效率與劇烈波動。與傳統金融市場不同,加密貨幣全天候運行,價格極易受到突發新聞、社交媒體情緒及技術升級的影響。這種持續的價格波動頻繁製造出定價偏差,為套利者提供

使用psycopg2.pool.SimpleConnectionPool可有效管理數據庫連接,避免頻繁創建和銷毀連接帶來的性能開銷。 1.創建連接池時指定最小和最大連接數及數據庫連接參數,確保連接池初始化成功;2.通過getconn()獲取連接,執行數據庫操作後使用putconn()將連接歸還池中,禁止直接調用conn.close();3.SimpleConnectionPool是線程安全的,適用於多線程環境;4.推薦結合contextmanager實現上下文管理器,確保連接在異常時也能正確歸還;

iter()用於獲取迭代器對象,next()用於獲取下一個元素;1.使用iter()可將列表等可迭代對象轉換為迭代器;2.調用next()逐個獲取元素,當元素耗盡時觸發StopIteration異常;3.通過next(iterator,default)可提供默認值避免異常;4.自定義迭代器需實現__iter__()和__next__()方法,控制迭代邏輯;使用默認值是安全遍歷的常用方式,整個機制簡潔且實用。

安裝對應數據庫驅動;2.使用connect()連接數據庫;3.創建cursor對象;4.用execute()或executemany()執行SQL並用參數化查詢防注入;5.用fetchall()等獲取結果;6.修改後需commit();7.最後關閉連接或使用上下文管理器自動處理;完整流程確保安全且高效執行SQL操作。
