当前位置: 首页 > 面试题库 >

Python中存在可变的命名元组吗?

叶华皓
2023-03-14
问题内容

任何人都可以修改namedtuple或提供替代类,以使其适用于可变对象吗?

主要是为了提高可读性,我想要执行类似于namedtuple的操作:

from Camelot import namedgroup

Point = namedgroup('Point', ['x', 'y'])
p = Point(0, 0)
p.x = 10

>>> p
Point(x=10, y=0)

>>> p.x *= 10
Point(x=100, y=0)

腌制所得物体必须是可能的。并且根据命名元组的特征,在表示对象时输出的顺序必须与构造对象时参数列表的顺序相匹配。


问题答案:

还有就是一个可变的替代方案collections.namedtuple-
recordclass。

它具有与API相同的API和内存占用量,namedtuple并且支持分配(它也应该更快)。例如:

from recordclass import recordclass

Point = recordclass('Point', 'x y')

>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
>>> print(p.x, p.y)
1 2
>>> p.x += 2; p.y += 3; print(p)
Point(x=3, y=5)

对于python 3.6及更高版本recordclass(从0.5开始)支持typehints:

from recordclass import recordclass, RecordClass

class Point(RecordClass):
   x: int
   y: int

>>> Point.__annotations__
{'x':int, 'y':int}
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
>>> print(p.x, p.y)
1 2
>>> p.x += 2; p.y += 3; print(p)
Point(x=3, y=5)

有一个更完整的示例(还包括性能比较)。

由于0.9recordclass库提供了另一个变体-recordclass.structclass工厂功能。它可以产生类,这些类的实例比__slots__基于实例的实例占用更少的html" target="_blank">内存。这对于具有属性值的实例非常重要,该属性值不打算具有参考周期。如果您需要创建数百万个实例,则可能有助于减少内存使用。这是一个说明性的例子。



 类似资料:
  • 问题内容: 我以前从未听说过命名元组,并且我认为元素可以用数字(如在元组和列表中)或键(如字典中)进行索引。我从未想到它们可以同时被索引。 因此,我的问题是: 什么叫元组? 如何使用它们? 为什么/何时应该使用命名元组而不是普通元组? 为什么/何时应该使用普通元组而不是命名元组? 是否有某种“命名列表”(命名元组的可变版本)? 问题答案: 命名元组基本上是易于创建的轻量级对象类型。可以使用类对象变

  • 我遇到了一种巧妙的方法,让命名图普尔从这里使用默认参数。 节点(val=无,left=无,right=无) 如果您希望“right”的默认值为空列表,您会怎么做?您可能知道,使用可变的默认参数(例如列表)是不可以的。 有没有一个简单的方法来实现这一点?

  • 我有以下命名元组: 然后我想要以下内容: 两个名称元组之间有重复,我如何子类ReadElement以包含一个附加字段? 然而元组是创建在那里的,那么在新语句中,如果我修改自我成为一个列表,我会失去类型信息,我该如何避免这种情况?

  • 假设我有一个这样的类: 假设我稍后创建了一个Foo对象,并选择覆盖f1的方法定义,如下所示: 如果我尝试: 我得到: 当然,我正努力让“我的f1”出版。我也希望f1是可选的。这是怎么回事?有没有可能在namedtuple中定义一个方法的默认实现,然后在new中重写它?

  • 问题内容: 如何使用循环命名变量?例如,如果我想让变量 double_1 = 2 , double_2 = 4 一直到 double_12 = 24 ,我该怎么写?我感觉会是这样的: 显然,这是行不通的,但是将循环号实现为变量名的正确语法是什么?我已经有一段时间没有编码了,但是我确实记得有一种方法可以做到这一点。 问题答案: 请改用字典。例如: 或者,如果您 绝对 必须 这样做 ,并且仅在完全了解

  • 本文向大家介绍F# 歧视工会中元组的命名元素,包括了F# 歧视工会中元组的命名元素的使用技巧和注意事项,需要的朋友参考一下 示例 定义区分联合时,可以命名元组类型的元素,并在模式匹配期间使用这些名称。 另外,命名已区分的并集的元素可以提高代码的可读性以及与C#的互操作性-提供的名称将用于属性的名称和构造函数的参数。互操作代码中默认生成的名称为“ Item”,“ Item1”,“ Item2” ..