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())

运行结果:

示例代码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].age
print(res)

res2 = data2[1].name
print(res2)

运行结果:

示例代码3:

from collections import namedtuple
card = 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))

运行结果:

示例代码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]))

运行结果:

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

from collections import namedtuple
course = 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)

运行结果:

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

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

运行结果:

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

from collections import namedtuple
person = 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)

运行结果:

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

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

运行结果:

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

from collections import namedtuple
person = 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)

运行结果:

示例代码10:   【field_defaults】

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

运行结果:

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

from collections import namedtuple
Point = 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)

运行结果:

示例代码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 = y
o = Point2(33, 44)
print(o)
print(o.x, o.y)

运行结果:

到此这篇关于python中namedtuple函数的用法解析的文章就介绍到这了,更多相关python namedtuple内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中把元组转换为namedtuple方法

    我们可以把表里每一个横行的数据,看成是不同的元组.在理解了这个概念后,昨天我们学了不少的namedtuple类,是否也能把元组转换成namedtuple呢?当然这是一个尝试,很多小伙伴平时使用的时候会很少用到,而且资料的搜集方面也比较难找.小编也搜集了很久才有收获,本篇就为大家带来元组在python中转换为namedtuple的方法. 之前我们了解了为什么使用namedtuple,现在该学习如何将常规元组和转换为namedtuple了.假设由于某种原因,有包含彩色RGBA值的实例.如果要将其转换

  • Python namedtuple命名元组实现过程解析

    这篇文章主要介绍了Python namedtuple命名元组实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 命名元组(namedtuple)是一种带有属性的元组,它们是组合只读数据的很好的方式. 相比一般的元组,构造命名元组需要先导入namedtuple,因为它不在默认的命名空间里.然后通过名字和属性来定义一个命名元组.这会返回一个像类一样的对象,可以进行多次实例化. 命名元组可以被打包.解包以及做所有可以对普通元组做的事,并且还可

  • Python中的defaultdict模块和namedtuple模块的简单入门指南

    在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:namedtuple, defaultdict, deque, Counter, OrderedDict等,其中defaultdict和namedtuple是两个很实用的扩展类型.defaultdict继承自dict,namedtuple继承自tuple. 一.defaultdict  1. 简介 在使用

  • 详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护. namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,还能够方便的通过属性名来访问数据. 接下来通过本文给大家分享python nam

  • Python的collections模块中namedtuple结构使用示例

    namedtuple 就是命名的 tuple,比较像 C 语言中 struct.一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 index 访问,没有明确的称呼,而 namedtuple 就是事先把这些 item 命名,以后可以方便访问. from collections import namedtuple # 初始化需要两个参数,第一个是 name,第二个参数是所有 item 名字的列表. coordinate = namedtu

  • python namedtuple函数的使用

    目录 先看演示 像类一样的访问属性 类似字典的访问 为什么可以这样? 源码解析 为什么有类的影子? 为什么有字典的影子? 先看演示 像类一样的访问属性 from collections import namedtuple Friend = namedtuple('Friend', ['name', 'gender', 'address', 'star', 'signature']) RidingRoad = Friend('RidingRoad', 'male', 'Mars', 'The fi

  • 简单讲解Python编程中namedtuple类的用法

    Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple. namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据. 在python中,传统的tuple类似于数组,只能通过下标来访问各个元素,我们还需要注释每个下标代表什么数据.通过使用namedtuple,每个元素有了自己的名字,类似于C语言中的struct,这样数据的意义就可以一目了然了.当然,声明namedtuple是非常简

  • 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

  • Python中int()函数的用法浅析

    int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builtin__: class int(object) | int(x[, base]) -> integer | | Convert a string or number to an integer, if possible. A floating point | argument will be truncated

  • Python中 map()函数的用法详解

    map( )函数在算法题目里面经常出现,map( )会根据提供的函数对指定序列做映射,在写返回值等需要转换的时候比较常用. 关于映射map,可以把[ ]转成字符串的话,就不需要用循环打印字符串输出结果这种比较旧的方式. 在Python 3中的例子如下: 也可以用匿名函数来计算幂计算: map(lambda x:x**2,[1,2,3,4,5]) 也可以用来规范输出: name_list={'tony','cHarLIE','rachAEl'} def format_name(s): ss=s[0

  • 基于python中__add__函数的用法

    运算符重载 _add ##定义:让自定义的类生成的对象(实例)能够使用运算符进行操作 class Vector01: '''定义一个一维向量''' def init(self,x): self.x = x def str(self): '''定义新生成的返回值是什么,如果没有这个之间返回的是类的特点''' return ('一维向量的分量是:%d' % (self.x)) def add(self, other): #表示print内的+ # print('参数是:',other) return

  • python中count函数简单用法

    python中count函数的用法 Python count()方法 描述 Python count() 方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. count()方法语法: str.count(sub, start= 0,end=len(string)) 参数 sub -- 搜索的子字符串 start -- 字符串开始搜索的位置.默认为第一个字符,第一个字符索引值为0. end -- 字符串中结束搜索的位置.字符中第一个字符的索引为 0.默认为字符串的最后

  • python中similarity函数实例用法

    1.similarity函数接收两个列表,并返回由两个列表中相同元素组成的列表. 2.函数使用列表推导,遍历所有a列表中的元素,并使用in关键词来判断这些元素是否存在于b列表中. 实例 def similarity(a, b): return [item for item in a if item in b] # EXAMPLES similarity([1, 2, 3], [1, 2, 4]) # [1, 2] 知识点扩充: python 语义similarity_Python:string的

  • Python中print()函数的用法详情

    Python中print()函数的方法是打印指定的内容.在交互环境中输入“help(print)”指令,可以显示print()函数的使用方法, 如图1所示: 图1 print()函数的使用方法 1 常用方法 1.1 打印单个内容 从图1中可以看出,print()函数的第一个参数是value,即要打印的内容.通过print()打印单个内容的方法 如图2所示: 图2 打印单个内容 1.2 打印多个内容 从图1中可以看出,print()函数的第二个参数是...,表示print()函数要打印的多个参数,

  • Python中input()函数的用法实例小结

    目录 一:input()函数的输入机制 二:input()函数常涉及的强制类型转换 三:带提示的input()函数及其常见问题 四:利用input()一次性输入多个变量值 附:input()函数结果的强制转换 总结 一:input()函数的输入机制 我们编写的大部分程序,都需要读取输入并对其进行处理,而基本的输入操作是从键盘键入数据.Python从键盘键入数据,大多使用其内置的input()函数.但是,不同于程序设计初学者常接触的C和C++,我们不需要在输入之时规定变量的类型.相反,我们可以非常

  • Python中random函数的用法整理大全

    首先我们需要导入random模块 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间 import random print(random.random()) 2. random.uniform(a, b): 返回随机生成的一个浮点数,范围在[a, b)之间 import random print(random.uniform(1,5)) 3. random.randint(a,b):生成指定范围内的整数  import random print(random

  • Python中apply函数的用法实例教程

    一.概述: python apply函数的具体含义如下:   apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数.args是一个包含将要提供给函数的按位置传递的参数的元组.如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典.   apply()的返回值就是func()的返回值,apply()的元素参数是有序的,元素的顺序必须和func()形式参数的顺序一致 二.使用示例: 下面给几个例子来

随机推荐