namedtuple
在写一些比较小的类的时候,例如 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相关推荐
- Python collections 模块 namedtuple、Counter、defaultdict
1. namedtuple 假设有两个列表,如下,要判断两个列表中的某一个索引值是否相等. In [7]: p = ['001', 'wohu', '100', 'Shaanxi']In [8]: t ...
- python namedtuple用法_Python的collections模块中namedtuple结构使用示例
namedtuple 就是命名的 tuple,比较像 C 语言中 struct.一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 inde ...
- python3 namedtuple_你不能低估的Python数据结构Namedtuple(二)
上篇你不能低估的Python数据结构Namedtuple(一)讲了namedtuple的一些基本用法,本篇继续. namedtuples和数据类(Data Class)之间有什么区别? 功能 在Pyt ...
- python中typing.NamedTuple示例
python中typing.NamedTuple示例 from typing import * # 导入依赖项 class Friend(NamedTuple): """ ...
- python namedtuple用法_Python namedtuple(命名元组)使用实例
namedtuple对象就如它的名字说定义的那样,你可以给tuple命名,具体看下面的例子:import collections Person=collections.namedtuple('Pers ...
- Python defaultdict 模块和 namedtuple 模块
在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:nam ...
- python 库整理: collections.namedtuple
namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性. 1 nametuple的创建 User1 = namedtuple('User_name', ['name', 'sex ...
- Python defaultdict 模块和 namedtuple 模块 1
在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等.Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:nam ...
- pythonnamedtuple定义类型_详解Python中namedtuple的使用
namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...
- Python中比元组更好用的namedtuple
1.什么是元组? 不可变的序列类型 "不能修改的列表" 2.元组支持哪些操作? 元组是序列类型,支持序列类型的所有操作 通过索引取值 one_tuple = ("可优&q ...
最新文章
- Qt OpenCV Win10环境配置
- [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)
- 190空难_印度撤侨专机空难 官方检视黑盒子查失事原因
- 安装OpenResty,实现分发层、应用层nginx+lua开发(附加问题:bad argument #2 to ‘set_keepalive‘ (number expected, got nil)
- linux redhat5.5终端打不开,为什么在 RedHat Linux 5 下不能使用 ifconfig 命令
- 用平常心去对待不平常的事
- linux上线tomcat安装目录,LINUX 下 tomcat的安装和配置
- 右键单击文件夹进入命令行窗口
- vscode 常用配置
- Vuforia开发完全指南
- c# 提取程序中的资源文件 .exe .resources .resx
- .net 创建属于自己的log类
- wordpress上传文件自动更名为时间形式
- 【ODBC】ODBC连接数据库详细说明
- Windows安装curl及基本命令
- 姿态传感器的原理与应用文献笔记
- 【学习日记】使用百度深度学习平台进行深度学习
- Ubuntu14.04 下 OpenCV2.4.9 编译
- 做好抖音的核心就这两点
- 使用scale缩放字体
热门文章
- AGV小车的运动是怎么控制的呢?
- 使用ZED Mini 相机运行ORB-SLAM2
- 【智能优化算法-闪电算法】基于闪电算法求解多目标优化问题附matlab代码
- java向上取整去掉末尾的0_BigDecimal去除末尾多余的0
- ROS系列:一、ROS是什么
- Coursera | Applied Data Science with Python 专项课程 | Applied Machine Learning in Python
- word图文混排复制到xhEditor图片不显示
- javaScript 实现表格table分页
- java map字典序_java中对map的字典序排序
- 考研数据结构填空题整合_做题版