在写一些比较小的类的时候,例如 Point(x, y) ,不用去定义一个类Point

class Point:     def __init__(self, x=1.0, y=1.0):self.x = xself.y = y

可使用namedtuple替换:

Point = namedtuple('Point', ['x', 'y'], defaults=[1.0, 1.0])

假设有一个列表points,它是一系列点的集合

points = [Point() for _ in range(100000)]

此时使用namedtuple可减少内存开销(Named tuple instances do not have per-instance dictionaries, so they are lightweight and require no more memory than regular tuples.)

也可使用__slots__来限制属性和方法,减少内存开销

class Point:     __slots__ = x, ydef __init__(self, x=1.0, y=1.0):self.x = xself.y = y

也可使用dataclass

from dataclasses import dataclass@dataclass
class Point:x: float = 1.0y: float = 1.0

示例:

设置默认值

from collections import namedtuple
>>> Account = namedtuple('Account', ['type', 'balance'], defaults=[0]) >>> Account._field_defaults {'balance': 0}
>>> Account = namedtuple('Account', ['type', 'balance'], defaults=[0,0]) >>> Account._field_defaults{'type': 0, 'balance': 0}

csv、sqlite

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):print(emp.name, emp.title)import sqlite3
conn = sqlite3.connect('/companydata')
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)

方法

>>> t = [11, 22]
>>> Point._make(t)
Point(x=11, y=22)>>> p = Point(x=11, y=22)
>>> p._asdict()
OrderedDict([('x', 11), ('y', 22)])>>> p = Point(x=11, y=22)
>>> p._replace(x=33)
Point(x=33, y=22)
>>> for partnum, record in inventory.items():
...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())>>> p._fields            # view the field names
('x', 'y')
>>> Color = namedtuple('Color', 'red green blue')
>>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
>>> Pixel(11, 22, 128, 255, 0)
Pixel(x=11, y=22, red=128, green=255, blue=0)>>> getattr(p, 'x')
11>>> class Point(namedtuple('Point', ['x', 'y'])):
...     __slots__ = ()
...     @property
...     def hypot(self):
...         return (self.x ** 2 + self.y ** 2) ** 0.5
...     def __str__(self):
...         return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot)
>>> for p in Point(3, 4), Point(14, 5/7):
...     print(p)
Point: x= 3.000  y= 4.000  hypot= 5.000
Point: x=14.000  y= 0.714  hypot=14.018>>> Point3D = namedtuple('Point3D', Point._fields + ('z',))>>> Book = namedtuple('Book', ['id', 'title', 'authors'])
>>> Book.__doc__ += ': Hardcover book in active collection'
>>> Book.id.__doc__ = '13-digit ISBN'
>>> Book.title.__doc__ = 'Title of first printing'
>>> Book.authors.__doc__ = 'List of authors sorted by last name'>>> Account = namedtuple('Account', 'owner balance transaction_count')
>>> default_account = Account('<owner name>', 0.0, 0)
>>> johns_account = default_account._replace(owner='John')
>>> janes_account = default_account._replace(owner='Jane')

 参考链接

namedtuple

dataclass

__slots__

转载于:https://www.cnblogs.com/zzwcng/p/10983446.html

namedtuple相关推荐

  1. Python collections 模块 namedtuple、Counter、defaultdict

    1. namedtuple 假设有两个列表,如下,要判断两个列表中的某一个索引值是否相等. In [7]: p = ['001', 'wohu', '100', 'Shaanxi']In [8]: t ...

  2. python namedtuple用法_Python的collections模块中namedtuple结构使用示例

    namedtuple 就是命名的 tuple,比较像 C 语言中 struct.一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 inde ...

  3. python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)

    上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...

  4. python中typing.NamedTuple示例

    python中typing.NamedTuple示例 from typing import * # 导入依赖项 class Friend(NamedTuple): """ ...

  5. python namedtuple用法_Python namedtuple(命名元组)使用实例

    namedtuple对象就如它的名字说定义的那样,你可以给tuple命名,具体看下面的例子:import collections Person=collections.namedtuple('Pers ...

  6. Python defaultdict 模块和 namedtuple 模块

    在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:nam ...

  7. python 库整理: collections.namedtuple

    namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性. 1 nametuple的创建 User1 = namedtuple('User_name', ['name', 'sex ...

  8. Python defaultdict 模块和 namedtuple 模块 1

    在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:nam ...

  9. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  10. Python中比元组更好用的namedtuple

    1.什么是元组? 不可变的序列类型 "不能修改的列表" 2.元组支持哪些操作? 元组是序列类型,支持序列类型的所有操作 通过索引取值 one_tuple = ("可优&q ...

最新文章

  1. Qt OpenCV Win10环境配置
  2. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)
  3. 190空难_印度撤侨专机空难 官方检视黑盒子查失事原因
  4. 安装OpenResty,实现分发层、应用层nginx+lua开发(附加问题:bad argument #2 to ‘set_keepalive‘ (number expected, got nil)
  5. linux redhat5.5终端打不开,为什么在 RedHat Linux 5 下不能使用 ifconfig 命令
  6. 用平常心去对待不平常的事
  7. linux上线tomcat安装目录,LINUX 下 tomcat的安装和配置
  8. 右键单击文件夹进入命令行窗口
  9. vscode 常用配置
  10. Vuforia开发完全指南
  11. c# 提取程序中的资源文件 .exe .resources .resx
  12. .net 创建属于自己的log类
  13. wordpress上传文件自动更名为时间形式
  14. 【ODBC】ODBC连接数据库详细说明
  15. Windows安装curl及基本命令
  16. 姿态传感器的原理与应用文献笔记
  17. 【学习日记】使用百度深度学习平台进行深度学习
  18. Ubuntu14.04 下 OpenCV2.4.9 编译
  19. 做好抖音的核心就这两点
  20. 使用scale缩放字体

热门文章

  1. AGV小车的运动是怎么控制的呢?
  2. 使用ZED Mini 相机运行ORB-SLAM2
  3. 【智能优化算法-闪电算法】基于闪电算法求解多目标优化问题附matlab代码
  4. java向上取整去掉末尾的0_BigDecimal去除末尾多余的0
  5. ROS系列:一、ROS是什么
  6. Coursera | Applied Data Science with Python 专项课程 | Applied Machine Learning in Python
  7. word图文混排复制到xhEditor图片不显示
  8. javaScript 实现表格table分页
  9. java map字典序_java中对map的字典序排序
  10. 考研数据结构填空题整合_做题版