日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

詳解Python中namedtuple的使用

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

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

namedtuple:

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

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

基本定義

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

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

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

typename

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

field_names

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

(2)field_names可以是單個(gè)字符串,每個(gè)字段名都用空格或逗號(hào)分隔,例如’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ù)實(shí)例化,因?yàn)椤痻’在’y’前,所以x=11,和函數(shù)參數(shù)賦值一樣的print(p[0]+p[1]) # 我們也可以使用下標(biāo)來訪問# 33 x, y = p # 也可以像一個(gè)元組那樣解析print(x,y)# (11, 22) print(p.x+p.y) # 也可以通過屬性名來訪問# 33 print(p) # 通過內(nèi)置的__repr__函數(shù),顯示該對(duì)象的信息# Point(x=11, y=22)

classmethod somenamedtuple._make(iterable)

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

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

classmethod somenamedtuple._asdict()

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

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

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

classmethod somenamedtuple._replace(**kwargs)

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

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

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 新的對(duì)象print(p)# Point(x=11, y=22)print(d)# Point(x=33, y=22)

classmethod somenamedtuple._fields

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

(2)因?yàn)槭窃M,因此支持加法操作

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

classmethod somenamedtuple._field_defaults

(1)該方法是python3.8新增的函數(shù),因?yàn)槲业陌姹臼?.6,無(wú)法驗(yàn)證其正確性

(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的對(duì)象

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

CSV OR Sqlite3

(1)同樣可以將從csv文件或者數(shù)據(jù)庫(kù)中讀取的文件存儲(chǔ)到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'))): # 這里每行返回一個(gè)對(duì)象 注意! print(emp.name, emp.title) import sqlite3conn = sqlite3.connect(’/companydata’) # 連接數(shù)據(jù)庫(kù)cursor = conn.cursor()cursor.execute(’SELECT name, age, title, department, paygrade FROM employees’)for emp in map(EmployeeRecord._make, cursor.fetchall()): # 每行返回一個(gè)對(duì)象 注意! print(emp.name, emp.title)

類的繼承

(1)接下來用deepmind的開源項(xiàng)目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)): # 這個(gè)函數(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ù) 不是重點(diǎn)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ù),注意只要修改了屬性值# 那么就返回一個(gè)新的對(duì)象def replace(self, **kwargs):output = self._replace(**kwargs) # 返回一個(gè)新的實(shí)例 output._validate_none_fields() # pylint: disable=protected-access 驗(yàn)證返回的新實(shí)例是否滿足要求return output # 這是為了針對(duì)tensorflow1版本的函數(shù)# 返回一個(gè)擁有相同屬性的對(duì)象,但是它的屬性值是輸入的大小和類型def map(self, field_fn, fields=GRAPH_FEATURE_FIELDS): # 對(duì)每個(gè)鍵應(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) 獲取的是鍵值對(duì)中的值, k表示鍵

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲一二三区视频| 国产精品高清一区二区| 麻豆高清免费国产一区| 国产高清亚洲| 精品久久久久久久| 麻豆精品在线视频| 国产成人1区| 亚洲91视频| 宅男噜噜噜66国产日韩在线观看| 亚洲永久字幕| 欧美日韩亚洲国产精品| 精品国产欧美| 欧美特黄一级大片| 亚洲精品护士| 久久精品二区亚洲w码 | 精品欧美久久| 中文精品电影| 国产伊人久久| 在线人成日本视频| 狠狠久久婷婷| 亚洲黄色在线| 久久不卡国产精品一区二区| 香蕉久久99| 日韩福利视频导航| 在线天堂中文资源最新版| 亚洲综合三区| 国产专区精品| 欧美专区一区二区三区| 久久超级碰碰| 伊人久久亚洲热| 国产精品三级| 欧美日韩一区二区综合 | 国产在线观看www| 伊人影院久久| 精品国产中文字幕第一页| 伊人久久婷婷| 国精品产品一区| 日韩一区精品视频| 国产综合色区在线观看| 日韩av三区| 视频一区中文| 精品免费av| 亚洲香蕉久久| 999国产精品999久久久久久| 国产精品一页| 午夜亚洲福利在线老司机| 久久的色偷偷| 亚洲美女久久| 激情欧美一区| 精品久久影院| 日韩毛片网站| 在线一区免费观看| 日韩欧美视频专区| 精品一区三区| 中国字幕a在线看韩国电影| 日韩精品福利一区二区三区| 久久视频国产| 成人午夜网址| 国产精品欧美三级在线观看| 久久最新视频| 激情久久婷婷| 精品久久久久久久| 欧美日韩99| av不卡在线| 久久久水蜜桃av免费网站| 欧美激情一区| 国产亚洲一区| 日韩欧美高清一区二区三区| 日韩亚洲国产欧美| 日韩高清不卡| 国产成人黄色| 精品久久视频| 精品久久美女| 国产黄色精品| 国产精品永久| 国产精品啊啊啊| 日韩成人av影视| 中文一区一区三区免费在线观 | 日本欧美一区二区| 亚洲激情偷拍| 精品久久精品| 国产aa精品| 动漫av一区| 国产精品久久久久久久久久久久久久久| 亚洲精品第一| 日韩精品91亚洲二区在线观看| 丝袜亚洲精品中文字幕一区| 国产精品7m凸凹视频分类| 999国产精品永久免费视频app| 日韩三区免费| 国产91一区| 国产亚洲福利| 在线精品亚洲| 日本在线成人| 奇米亚洲欧美| 国产精品一区二区中文字幕| 国产精品探花在线观看| 国产福利资源一区| 国产高清亚洲| 水蜜桃精品av一区二区| 伊人久久视频| 色婷婷精品视频| 亚洲欧美综合| 午夜在线播放视频欧美| 日韩中文字幕1| 日韩欧美四区| 久久精品二区亚洲w码| 粉嫩av一区二区三区四区五区| 午夜av不卡| 午夜久久tv| 亚洲综合图色| 国产精品对白久久久久粗| 精品久久国产一区| 精品网站999| 免费看av不卡| 最新国产精品| 国产精品亲子伦av一区二区三区| 国产成人精品一区二区三区在线| 韩国三级一区| 日韩专区在线视频| 国产精品一卡| 天堂√中文最新版在线| 日韩午夜电影| 国产亚洲第一伦理第一区| 精品视频国内| 激情婷婷久久| 日韩高清一区在线| 成人污污视频| 国产亚洲一级| 国产欧美日韩精品一区二区免费 | 亚洲激情五月| 四虎精品一区二区免费| 国产乱子精品一区二区在线观看| 九九九精品视频| 91久久国产| 97精品久久| 高清日韩中文字幕| 一区二区自拍| 美女高潮久久久| 国产欧美三级| 激情婷婷欧美| 国产精品美女在线观看直播| 亚洲国产福利| 中文一区一区三区免费在线观| 国产精品久久国产愉拍| 免费欧美在线视频| 国产一区二区三区四区| 久久福利一区| 欧美xxxx中国| 亚洲欧洲专区| 在线一区视频观看| 偷拍亚洲精品| 色婷婷精品视频| 国产极品一区| 亚洲精品九九| 欧美日韩激情在线一区二区三区| 欧美中文一区| 亚洲免费婷婷| 久久精品二区三区| 欧美一区二区三区久久精品| 婷婷综合社区| 久久精品国产亚洲aⅴ| 亚洲伊人精品酒店| 国产精品一区亚洲| 国产手机视频一区二区| 国产成年精品| 欧美资源在线| 91一区二区三区四区| 日本中文字幕不卡| 狠狠干成人综合网| 日韩欧美午夜| 美女久久久久久| 91精品一区| 视频一区二区欧美| 久久精品中文| 高清日韩中文字幕| 国产精品久久久久久久久久妞妞| 亚洲视频国产| 在线视频免费在线观看一区二区| 黑人精品一区| 欧美激情另类| 国产精品日本一区二区三区在线| 日韩制服丝袜先锋影音| 欧美肉体xxxx裸体137大胆| 中文字幕在线免费观看视频| 麻豆一区二区三区| 国产欧美日韩精品高清二区综合区 | 国产精品亚洲欧美一级在线| 激情视频一区二区三区| 丰满少妇一区| 精品亚洲精品| 欧美1区二区| 欧美一区=区三区| 日韩免费精品| 亚洲a级精品| 亚洲一二三区视频| 亚洲精品字幕| 日韩福利视频一区| 日韩av资源网| 日韩av在线免费观看不卡|