python解析之namedtuple函数怎么使用

源码解释:

def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None):    """Returns a new subclass of tuple with named fields.    >>> Point = namedtuple('Point', ['x', 'y'])    >>> Point.__doc__                   # docstring for the new class    'Point(x, y)'    >>> p = Point(11, y=22)             # instantiate with positional args or keywords    >>> p[0] + p[1]                     # indexable like a plain tuple    33    >>> x, y = p                        # unpack like a regular tuple    >>> x, y    (11, 22)    >>> p.x + p.y                       # fields also accessible by name    33    >>> d = p._asdict()                 # convert to a dictionary    >>> d['x']    11    >>> Point(**d)                      # convert from a dictionary    Point(x=11, y=22)    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields    Point(x=100, y=22)    """

语法结构:

namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
  • typename: 代表新建的一个元组的名字。

  • field_names: 是元组的内容,是一个类似list的[‘x’,‘y’]

命名元组,使得元组可像列表一样使用key访问(同时可以使用索引访问)。

collections.namedtuple 是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类.

创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。

存放在对应字段里的数据要以一串参数的形式传入到构造函数中(注意,元组的构造函数却只接受单一的可迭代对象)。

命名元组还有一些自己专有的属性。最有用的:类属性_fields、类方法 _make(iterable)和实例方法_asdict()。

示例代码1:

from collections import namedtuple # 定义一个命名元祖city,City类,有name/country/population/coordinates四个字段city = namedtuple('City', 'name country population coordinates')tokyo = city('Tokyo', 'JP', 36.933, (35.689, 139.69))print(tokyo) # _fields 类属性,返回一个包含这个类所有字段名称的元组print(city._fields) # 定义一个命名元祖latLong,LatLong类,有lat/long两个字段latLong = namedtuple('LatLong', 'lat long')delhi_data = ('Delhi NCR', 'IN', 21.935, latLong(28.618, 77.208)) # 用 _make() 通过接受一个可迭代对象来生成这个类的一个实例,作用跟City(*delhi_data)相同delhi = city._make(delhi_data) # _asdict() 把具名元组以 collections.OrderedDict 的形式返回,可以利用它来把元组里的信息友好地呈现出来。print(delhi._asdict())

运行结果:

python解析之namedtuple函数怎么使用

示例代码2:

from collections import namedtuple Person = namedtuple('Person', ['age', 'height', 'name'])data2 = [Person(10, 1.4, 'xiaoming'), Person(12, 1.5, 'xiaohong')]print(data2) res = data2[0].ageprint(res) res2 = data2[1].nameprint(res2)

运行结果:

python解析之namedtuple函数怎么使用

示例代码3:

from collections import namedtuplecard = namedtuple('Card', ['rank', 'suit'])  # 定义一个命名元祖card,Card类,有rank和suit两个字段class FrenchDeck(object):    ranks = [str(n) for n in range(2, 5)] + list('XYZ')    suits = 'AA BB CC DD'.split()  # 生成一个列表,用空格将字符串分隔成列表     def __init__(self):        # 生成一个命名元组组成的列表,将suits、ranks两个列表的元素分别作为命名元组rank、suit的值。        self._cards = [card(rank, suit) for suit in self.suits for rank in self.ranks]        print(self._cards)     # 获取列表的长度    def __len__(self):        return len(self._cards)    # 根据索引取值    def __getitem__(self, item):        return self._cards[item]f = FrenchDeck()print(f.__len__())print(f.__getitem__(3))

运行结果:

python解析之namedtuple函数怎么使用

示例代码4:

from collections import namedtuple person = namedtuple('Person', ['first_name', 'last_name']) p1 = person('san', 'zhang')print(p1)print('first item is:', (p1.first_name, p1[0]))print('second item is', (p1.last_name, p1[1]))

运行结果:

python解析之namedtuple函数怎么使用

示例代码5: 【_make 从存在的序列或迭代创建实例】

from collections import namedtuplecourse = namedtuple('Course', ['course_name', 'classroom', 'teacher', 'course_data'])math = course('math', 'ERB001', 'Xiaoming', '09-Feb')print(math)print(math.course_name, math.course_data)course_list = [    ('computer_science', 'CS001', 'Jack_ma', 'Monday'),    ('EE', 'EE001', 'Dr.han', 'Friday'),    ('Pyhsics', 'EE001', 'Prof.Chen', 'None')]for k in course_list:    course_i = course._make(k)    print(course_i)

运行结果:

python解析之namedtuple函数怎么使用

示例代码6: 【_asdict 返回一个新的ordereddict,将字段名称映射到对应的值】

from collections import namedtupleperson = namedtuple('Person', ['first_name', 'last_name'])zhang_san = ('Zhang', 'San')p = person._make(zhang_san)print(p)# 返回的类型不是dict,而是orderedDictprint(p._asdict())

运行结果:

python解析之namedtuple函数怎么使用

示例代码7: 【_replace 返回一个新的实例,并将指定域替换为新的值】

from collections import namedtupleperson = namedtuple('Person', ['first_name', 'last_name'])zhang_san = ('Zhang', 'San')p = person._make(zhang_san)print(p)p_replace = p._replace(first_name='Wang')print(p_replace)print(p)p_replace2 = p_replace._replace(first_name='Dong')print(p_replace2)

运行结果:

python解析之namedtuple函数怎么使用

示例代码8: 【_fields 返回字段名】

from collections import namedtupleperson = namedtuple('Person', ['first_name', 'last_name'])zhang_san = ('Zhang', 'San')p = person._make(zhang_san)print(p)print(p._fields)

运行结果:

python解析之namedtuple函数怎么使用

示例代码9: 【利用fields可以将两个namedtuple组合在一起】

from collections import namedtupleperson = namedtuple('Person', ['first_name', 'last_name'])print(person._fields)degree = namedtuple('Degree', 'major degree_class')print(degree._fields)person_with_degree = namedtuple('person_with_degree', person._fields + degree._fields)print(person_with_degree._fields)zhang_san = person_with_degree('san', 'zhang', 'cs', 'master')print(zhang_san)

运行结果:

python解析之namedtuple函数怎么使用

示例代码10: 【field_defaults】

from collections import namedtupleperson = namedtuple('Person', ['first_name', 'last_name'], defaults=['san'])print(person._fields)print(person._field_defaults)print(person('zhang'))print(person('Li', 'si'))

运行结果:

python解析之namedtuple函数怎么使用

示例代码11: 【namedtuple是一个类,所以可以通过子类更改功能】

from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])p = Point(4, 5)print(p)class Point(namedtuple('Point', ['x', 'y'])):    __slots__ = ()     @property    def hypot(self):        return self.x + self.y    def hypot2(self):        return self.x + self.y    def __str__(self):        return 'result is %.3f' % (self.x + self.y)aa = Point(4, 5)print(aa)print(aa.hypot)print(aa.hypot2)

运行结果:

python解析之namedtuple函数怎么使用

示例代码12: 【注意观察两种写法的不同】

from collections import namedtuple Point = namedtuple("Point", ["x", "y"])p = Point(11, 22)print(p)print(p.x, p.y) # namedtuple本质上等于下面写法class Point2(object):    def __init__(self, x, y):        self.x = x        self.y = yo = Point2(33, 44)print(o)print(o.x, o.y)

运行结果:

python解析之namedtuple函数怎么使用

关于“python解析之namedtuple函数怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python解析之namedtuple函数怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

文章标题:python解析之namedtuple函数怎么使用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22296

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月1日 下午11:20
下一篇 2022年9月1日 下午11:22

相关推荐

  • windows中怎么用cmd打开任务管理器

    用cmd打开任务管理器命令的步骤 1、按住键盘上的Win+R键打开运行窗口,或点击左下角的【开始】—【运行】,在运行窗口中输入cmd,按Enter键打开cmd窗口 2、输入C:Windowssystem32taskmgr.exe,然后按Enter键,就能打开任务管理器了 3、CMD打开任务管理器窗口…

    2022年9月6日
    2.6K00
  • MySQL中replace into与replace区别是什么

    0.故事的背景 【表格结构】 CREATE TABLE `xtp_algo_white_list` ( `strategy_type` int DEFAULT NULL, `user_name` varchar(64) COLLATE utf8_bin DEFAULT NULL, `status` …

    2022年9月1日
    73300
  • 创业公司为何要进行人员培训?

    本文来自Worktile 运营国际事业部新晋小鲜肉 @邵智康的激情分享,其独到而又不失水准的看法如一股清流洒向人间如果你正囿于人员培训的问题,那就千万走过路过不要错过啦 在企业发展的巨流河里,无论商业环境如何发展与变迁,行业竞争如何残酷而激烈,对于无数大大小小的企业来说,他们在许多年的浮浮沉沉中也许…

    2022年3月20日
    62500
  • APT组织使用的10大安全漏洞分别是什么

    概述 APT攻击(Advanced Persistent Threat,高级持续性威胁)是利用先进的攻击手段对特定目标进行长期持续性网络攻击的攻击形式。APT攻击的原理相对于其他攻击形式更为高级和先进,其高级性主要体现在精确的信息收集、高度的隐蔽性、以及使用各种复杂的目标系统/应用程序漏洞等方面。 …

    2022年9月21日
    1.0K00
  • SQL中的开窗函数是什么

    OVER的定义 OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。 OVER的语法 OVER ( [ PARTITION BY column ] [ ORDER BY culumn ] ) PARTITION B…

    2022年9月2日
    1.1K00
  • 影城服务器续保走什么科目

    影城服务器续保一般走固定资产和管理费用这两个科目。首先要确定的是服务器是否被列入固定资产。如果是,则续保费用可以计入固定资产的后续支出中。此外,如果服务器的续保被视作一种常规支出,那么它也可以作为管理费用的一部分进行核算,具体归在管理费用下的维修保养费科目。 一、固定资产的后续支出 当影城服务器属于…

    2024年4月25日
    800
  • mysql的安装路径如何查看

    查看方法:1、鼠标右击“计算机”图标,在打开的菜单中点击“管理”;2、依次点击“服务和应用程序”-“服务”;3、在右侧服务列表中,找到mysql服务;4、选中mysql服务,点击鼠标右键,在打开的菜单中选择“属性”;5、在“mysql属性”弹窗中,查看“可执行文件路径”选项的值即可,该选项的值就是M…

    2022年9月24日
    2.0K00
  • 电脑蓝屏代码0x000009c如何解决

    解决方法: 方法一: 1、首先重启电脑,按住“F8”进入以下界面,然后进入“安全模式” 2、要是可以进入安全模式,就在其中将最近安装的驱动或软件全部卸载。 3、还有可能是因为系统中了病毒,所以可以尝试在安全模式中清理一下病毒。 4、如果进不去安全模式,那就是内存或硬件出现问题,就需要用下面的方法来解…

    2022年9月16日
    93500
  • 电脑core的含义是什么

    电脑中core有两种意思:1、核心,也即内核,是CPU最重要的组成部分,CPU所有的计算、接受存储命令、处理数据都由核心执行;2、酷睿,core是英特尔的处理器名称,酷睿是英特尔公司继奔腾处理器之后推出的处理器品牌,目前已经发布了十二代酷睿处理器。 本教程操作环境:windows10系统、DELL …

    2022年9月6日
    2.5K00
  • vue包不包含jQuery

    vue中不包含jquery;vue是一个用于创建用户界面的开源JavaScript框架,虽然jquery也是一个JavaScript框架,但是jquery是使用选择器选取DOM对象,对其进行赋值、取值、事件绑定等操作,而vue对数据进行操作不再需要引用响应的DOM对象,二者并不存在包含的关系。 本文…

    2022年9月8日
    49700
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部