iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python解析之namedtuple函数的用法
  • 169
分享到

python解析之namedtuple函数的用法

2024-04-02 19:04:59 169人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章给大家带来了关于python的相关知识,主要介绍了Python中namedtuple函数的用法解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下。【相关推荐:python3视频教程 】源码解释:de

【相关推荐:python3视频教程

源码解释:

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)

运行结果:

【相关推荐:Python3视频教程 】

以上就是python解析之namedtuple函数的用法的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: python解析之namedtuple函数的用法

本文链接: https://www.lsjlt.com/news/33949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python解析之namedtuple函数的用法
    本篇文章给大家带来了关于Python的相关知识,主要介绍了python中namedtuple函数的用法解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下。【相关推荐:Python3视频教程 】源码解释:de...
    99+
    2022-09-01
  • python中namedtuple函数的用法解析
    源码解释: def namedtuple(typename, field_names, *, rename=False, defaults=None, module=None): ...
    99+
    2022-11-11
  • python namedtuple函数的使用
    目录先看演示像类一样的访问属性类似字典的访问为什么可以这样?源码解析为什么有类的影子?为什么有字典的影子?先看演示 像类一样的访问属性 from collections import namedtuple F...
    99+
    2022-06-02
    python namedtuple函数
  • Drupal7之drupal_static函数用法解析
    Drupal7 非常强大,其强大核心之一是entity field模式,比如node/taxonomy term/ user 都是一种entity, 并且支持field模式,也就是用户可以随意的添加新的field给nod...
    99+
    2022-06-12
    Drupal7 drupal_static 函数 用法
  • Python-torch 之torch.clamp() 函数解析
    目录Python-torch torch.clamp() 函数解析1. 解析2. 对比扩展:torch.clamp()函数Python-torch torch.clamp() 函数解...
    99+
    2023-05-20
    torch.clamp() 函数 python torch.clamp() 函数 Python torch
  • Python笔记之Scipy.stats.norm函数使用解析
    目录Scipy.stats.norm函数解析调用方式用两种stats.norm主要公共方法如下总结Scipy.stats.norm函数解析 scipy.stats.norm函数 可以...
    99+
    2023-02-03
    Python函数 Scipy.stats.norm函数 Python Scipy.stats.norm
  • 简单讲解Python编程中namedtuple类的用法
    Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple。 namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够...
    99+
    2022-06-04
    简单 Python namedtuple
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2022-11-12
  • python中pandas库的iloc函数用法解析
    目录python中pandas库的iloc函数用法1. 单个整数位置索引2. 整数位置范围索引3. 整数位置列表索引4. 布尔值索引补充:python中iloc与loc的区别loc用...
    99+
    2023-05-19
    python pandas库iloc函数用法 python pandas库iloc函数 python pandas库
  • Python数据分析之NumPy常用函数使用详解
    目录文件读入1、保存或创建新文件 2、读取csv文件的函数loadtxt3、常见的函数4、股票的收益率等5、对数收益与波动率6、日期分析总结本篇我们将以分析历史股价为例,介...
    99+
    2022-11-11
  • python基础语法之函数应用实例分析
    这篇“python基础语法之函数应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python基础语法之函数应用实例...
    99+
    2023-06-30
  • Pandas数据分析之groupby函数用法实例详解
    目录正文一、了解groupby二、数据文件简介三、求各个商品购买量四、求各个商品转化率五、转化率最高的30个商品及其转化率小小の总结正文 今天本人在赶学校课程作业的时候突然发现gro...
    99+
    2022-11-11
  • 详解Python之find函数的使用
    目录          一、find函数的官方定义          二、find函数的详细函数使用解释 一、find函数的官方定义 首先,Python的find函数多用在字符串的处理上,也是Python计算机二级的小考点。 定义:P...
    99+
    2023-10-12
    python
  • Python max函数中key的用法及原理解析
    目录一、背景二、原理三、用法四、实例一、背景 起源于一个问题:怎样找到字符串中出现次数最多的字符 其实使用max函数就能很轻松的解决这个问题: 代码: str1 = "AAAaaa8888899sssss" pr...
    99+
    2022-06-02
    Python max函数key用法 Python max函数
  • Python基础之sorted()函数用法
    本篇是关于sorted()函数的一些基本用法,如有不足缺陷欢迎补充指正。 1、简单的排序 sorted函数可以对可迭代类型的容器内的数据进行排序 lst1 = (5,4,3,2,1)lst2 = ('...
    99+
    2023-10-12
    python
  • python中any函数的用法分析
    python中any函数的用法:any函数主要是用来判断指定的可迭代参数iterable是否全部为False,则返回False,如果有一个为True,则返回True,元素除了是0、空、False外都算True;any函数语法格式为:“any...
    99+
    2022-10-17
  • python中bool函数的用法分析
    python中bool函数的用法:bool函数主要是用来将指定参数转换为布尔类型,如果没有参数,返回False;bool函数的语法为:“bool(object)”,这里object指的是任何对象,比如字符串、列表、数字等等。具体用法实例如下...
    99+
    2022-10-18
  • python中all函数的用法分析
    python中all函数的用法:all函数主要是用来判断指定的可迭代参数iterable中的所有元素是否都为TRUE,如果是返回True,否则返回False,除了是0、空、None、False外都算True;all函数语法格式为:“all(...
    99+
    2022-10-10
  • python中ascii函数的用法分析
    python中ascii函数的用法:ascii函数与repr函数类似,ascii函数主要是用来返回包含一个对象的可打印表示形式的字符串,如果字符串中有非ASCII编码的字符会通过repr函数使用\x、\u 和 \U来进行转义;ascii函数...
    99+
    2022-10-07
  • python中bin函数的用法分析
    python中bin函数的用法:bin函数主要是用来返回一个整形int或者一个长整形long int的二进制表示,相当于是用来获取数字的二进制值;bin函数的语法格式:“bin(x)”,这里x指的是int或者long int数字,...
    99+
    2022-10-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作