电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Python中namedtuple的使用

瀏覽:4日期:2022-07-27 11:26:28

namedtuple是Python中存儲數(shù)據(jù)類型,比較常見的數(shù)據(jù)類型還有有l(wèi)ist和tuple數(shù)據(jù)類型。相比于list,tuple中的元素不可修改,在映射中可以當(dāng)鍵使用。

namedtuple:

namedtuple類位于collections模塊,有了namedtuple后通過屬性訪問數(shù)據(jù)能夠讓我們的代碼更加的直觀更好維護。namedtuple能夠用來創(chuàng)建類似于元祖的數(shù)據(jù)類型,除了能夠用索引來訪問數(shù)據(jù),能夠迭代,還能夠方便的通過屬性名來訪問數(shù)據(jù)。

接下來通過本文給大家分享python namedtuple()的使用,一起看看吧!

基本定義

collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

(1)返回一個名為typename的新元組子類

(2)新的子類用于創(chuàng)建類似元組的對象,這些對象具有可通過屬性查找訪問的字段以及可索引和可​​迭代的字段field_names

typename

(1)typename表示這個子類的名字,比如C++、python、Java中的類名

field_names

(1)field_names是一個字符串序列,例如[’x’,’y’]

(2)field_names可以是單個字符串,每個字段名都用空格或逗號分隔,例如’x y’或’x,y’

others

(1)其它的參數(shù)并不常用,這里不再介紹啦

基本樣例

from collections import namedtuple # 基本例子Point = namedtuple(’Point’,[’x’,’y’]) # 類名為Point,屬性有’x’和’y’ p = Point(11, y=22) # 用位置或關(guān)鍵字參數(shù)實例化,因為’x’在’y’前,所以x=11,和函數(shù)參數(shù)賦值一樣的print(p[0]+p[1]) # 我們也可以使用下標(biāo)來訪問# 33 x, y = p # 也可以像一個元組那樣解析print(x,y)# (11, 22) print(p.x+p.y) # 也可以通過屬性名來訪問# 33 print(p) # 通過內(nèi)置的__repr__函數(shù),顯示該對象的信息# Point(x=11, y=22)

classmethod somenamedtuple._make(iterable)

(1)從一個序列或者可迭代對象中直接對field_names中的屬性直接賦值,返回一個對象

t = [11, 22] # 列表 listp = Point._make(t) # 從列表中直接賦值,返回對象print(Point(x=11, y=22))# Point(x=11, y=22)

classmethod somenamedtuple._asdict()

(1)之前也說過了,說它是元組,感覺更像一個帶名字的字典

(2)我們也可以直接使用_asdict()將它解析為一個字典dict

p = Point(x=11, y=22) # 新建一個對象d = p._asdict() # 解析并返回一個字典對象print(d)# {’x’: 11, ’y’: 22}

classmethod somenamedtuple._replace(**kwargs)

(1)這是對某些屬性的值,進行修改的,從replace這個單詞就可以看出來

(2)注意該函數(shù)返回的是一個新的對象,而不是對原始對象進行修改

p = Point(x=11, y=22) # x=11,y=22print(p)# Point(x=11, y=22) d = p._replace(x=33) # x=33,y=22 新的對象print(p)# Point(x=11, y=22)print(d)# Point(x=33, y=22)

classmethod somenamedtuple._fields

(1)該方法返回該對象的所有屬性名,以元組的形式

(2)因為是元組,因此支持加法操作

print(p._fields) # 查看屬性名# (’x’, ’y’) Color = namedtuple(’Color’, ’red green blue’)Pixel = namedtuple(’Pixel’, Point._fields + Color._fields) # 新建一個子類,使用多個屬性名q = Pixel(11, 22, 128, 255, 0)print(q)

classmethod somenamedtuple._field_defaults

(1)該方法是python3.8新增的函數(shù),因為我的版本是3.6,無法驗證其正確性

(2)下面給出官方的示例

Account = namedtuple(’Account’, [’type’, ’balance’], defaults=[0])print(Account._field_defaults)#{’balance’: 0}print(Account(’premium’))#Account(type=’premium’, balance=0)

getattr()函數(shù)

(1)用來獲得屬性的值

print(getattr(p, ’x’))# 11

字典創(chuàng)建namedtuple()

(1)從字典來構(gòu)建namedtuple的對象

d = {’x’: 11, ’y’: 22} # 字典p = Point(**d) # 雙星號是重點print(p)# Point(x=11, y=22)

CSV OR Sqlite3

(1)同樣可以將從csv文件或者數(shù)據(jù)庫中讀取的文件存儲到namedtuple中

(2)這里每次存的都是一行的內(nèi)容

EmployeeRecord = namedtuple(’EmployeeRecord’, ’name, age, title, department, paygrade’) import csvfor emp in map(EmployeeRecord._make, csv.reader(open('employees.csv', 'r'))): # 這里每行返回一個對象 注意! print(emp.name, emp.title) import sqlite3conn = sqlite3.connect(’/companydata’) # 連接數(shù)據(jù)庫cursor = conn.cursor()cursor.execute(’SELECT name, age, title, department, paygrade FROM employees’)for emp in map(EmployeeRecord._make, cursor.fetchall()): # 每行返回一個對象 注意! print(emp.name, emp.title)

類的繼承

(1)接下來用deepmind的開源項目graph_nets中的一段代碼來介紹

NODES = 'nodes'EDGES = 'edges'RECEIVERS = 'receivers'SENDERS = 'senders'GLOBALS = 'globals'N_NODE = 'n_node'N_EDGE = 'n_edge' GRAPH_DATA_FIELDS = (NODES, EDGES, RECEIVERS, SENDERS, GLOBALS)GRAPH_NUMBER_FIELDS = (N_NODE, N_EDGE) class GraphsTuple(# 定義元組子類名 以及字典形式的鍵名(屬性名) collections.namedtuple('GraphsTuple', GRAPH_DATA_FIELDS + GRAPH_NUMBER_FIELDS)): # 這個函數(shù)用來判斷依賴是否滿足,和我們的namedtuple關(guān)系不大def _validate_none_fields(self):'''Asserts that the set of `None` fields in the instance is valid.'''if self.n_node is None: raise ValueError('Field `n_node` cannot be None')if self.n_edge is None: raise ValueError('Field `n_edge` cannot be None')if self.receivers is None and self.senders is not None: raise ValueError( 'Field `senders` must be None as field `receivers` is None')if self.senders is None and self.receivers is not None: raise ValueError( 'Field `receivers` must be None as field `senders` is None')if self.receivers is None and self.edges is not None: raise ValueError( 'Field `edges` must be None as field `receivers` and `senders` are ' 'None') # 用來初始化一些參數(shù) 不是重點def __init__(self, *args, **kwargs):del args, kwargs# The fields of a `namedtuple` are filled in the `__new__` method.# `__init__` does not accept parameters.super(GraphsTuple, self).__init__()self._validate_none_fields() # 這就用到了_replace()函數(shù),注意只要修改了屬性值# 那么就返回一個新的對象def replace(self, **kwargs):output = self._replace(**kwargs) # 返回一個新的實例 output._validate_none_fields() # pylint: disable=protected-access 驗證返回的新實例是否滿足要求return output # 這是為了針對tensorflow1版本的函數(shù)# 返回一個擁有相同屬性的對象,但是它的屬性值是輸入的大小和類型def map(self, field_fn, fields=GRAPH_FEATURE_FIELDS): # 對每個鍵應(yīng)用函數(shù)'''Applies `field_fn` to the fields `fields` of the instance.`field_fn` is applied exactly once per field in `fields`. The result mustsatisfy the `GraphsTuple` requirement w.r.t. `None` fields, i.e. the`SENDERS` cannot be `None` if the `EDGES` or `RECEIVERS` are not `None`,etc.Args: field_fn: A callable that take a single argument. fields: (iterable of `str`). An iterable of the fields to apply`field_fn` to.Returns: A copy of the instance, with the fields in `fields` replaced by the result of applying `field_fn` to them.'''return self.replace(**{k: field_fn(getattr(self, k)) for k in fields}) # getattr(self, k) 獲取的是鍵值對中的值, k表示鍵

到此這篇關(guān)于詳解Python中namedtuple的使用的文章就介紹到這了,更多相關(guān)python namedtuple的使用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 南京欧陆电气股份有限公司-风力发电机官网 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 耐高温硅酸铝板-硅酸铝棉保温施工|亿欧建设工程 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 电动垃圾车,垃圾清运车-江苏速利达机车有限公司 | 膏剂灌装旋盖机-眼药水灌装生产线-西林瓶粉剂分装机-南通博琅机械科技 | 移动机器人产业联盟官网| 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 真空上料机(一种真空输送机)-百科 | 代做标书-代写标书-专业标书文件编辑-「深圳卓越创兴公司」 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 烽火安全网_加密软件、神盾软件官网| 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 |