类似于namedlist,但具有其他特性(嵌套类、递归合并等)。

mutabletuple的Python项目详细描述


概述

类似于namedlist,但具有其他功能: *像本地python字典一样打印 *改进对嵌套可变元组的支持 *递归地完成到字典的转换 *可以使用类似词典的iteritems进行迭代 *从dict或其他可变元组合并嵌套可变元组 *mtfactory支持参数 *嵌套pickle支持

warningpickling有效,但仅适用于具有默认值的可变元组。

典型用法

您可以使用可变元组,如可变名称元组:

>>> from mutabletuple import mutabletuple
>>> from collections import OrderedDict

>>> Point = mutabletuple('Point', 'x y')
>>> p = Point(1, 3)
>>> p.x = 2
>>> assert p.x == 2
>>> assert p.y == 3

或者,可以为所有字段指定默认值:

>>> Point = mutabletuple('Point', ['x', 'y'], default=3)
>>> p = Point(y=2)
>>> assert p.x == 3
>>> assert p.y == 2

或者,可以指定每个字段的默认值:

>>> Point = mutabletuple('Point', [('x', 0), ('y', 100)])
>>> p = Point()
>>> assert p.x == 0
>>> assert p.y == 100

如果使用映射,则可以方便地指定mtnodefault值 字段使用默认值:

>>> from mutabletuple import MtNoDefault
>>> Point = mutabletuple('Point', OrderedDict((('y', MtNoDefault),
...                                            ('x', 100))),
...                                            default=5)
>>> p = Point()
>>> assert p.x == 100
>>> assert p.y == 5

名称列表式行为

可变元组的行为类似于namedlist。查看namedlist的文档了解更多详细信息:https://pypi.python.org/pypi/namedlist

附加功能

其他班级成员

可变元组类包含以下成员:

  • asdict():返回一个dict,它将字段名映射到 相应的值。
  • 字段:列出字段名的字符串元组。有助于反省。
  • 合并:递归地与dict或另一个可变元组合并。
  • ordered dict:递归地将可变元组转换为有序dict。
  • iteritems:像dict一样迭代。

可变默认值

对于可变元组,请注意指定可变默认值 价值观。由于python处理默认值的方式,每个 可变元组将共享默认值。这尤其有问题 默认值为列表。例如:

>>> A = mutabletuple('A', [('x', [])])
>>> a = A()
>>> a.x.append(4)
>>> b = A()
>>> assert b.x == [4]

这可能不是所需的行为,请参阅下一节。

为默认值指定工厂函数

对于可变元组,可以为 默认情况下,通过在mtfactory调用中包装它。唯一的变化 例如,将默认值从[]更改为mtfactory(list)。但是 注意b.x是一个新的列表对象,不与a.x共享:

>>> from mutabletuple import MtFactory
>>> A = mutabletuple('A', [('x', MtFactory(list))])
>>> a = A()
>>> a.x.append(4)
>>> b = A()
>>> assert b.x == []

每次创建新实例时,您的可调用(在本例中, list),将被调用以生成默认值的新实例 价值。

为工厂函数指定参数

当使用嵌套的可变元组时,可能需要提供参数 用于创建嵌套的可变元组。下面是一个例子 操作方法:

>>> Point  = mutabletuple('Point', [('x', 0), ('y', 0)])
>>> Vector = mutabletuple('Vector', [('p1', MtFactory(Point, 2)),
...                                  ('p2', MtFactory(Point, 4, 8))])
>>> v1     = Vector()
>>> assert(v1 == Vector(Point(2, 0), Point(4, 8)))

每次创建向量时都会创建初始化点。

将可变元组与可变元组或dict合并

当使用嵌套的可变元组时,可以使用 递归地与只表示子集的字典合并 可变元组的数目:

>>> Point  = mutabletuple('Point', [('x', 0), ('y', 0)])
>>> Vector = mutabletuple('Vector', [('p1', MtFactory(Point)),
...                                  ('p2', MtFactory(Point))])
>>> Shape  = mutabletuple('Shape', [('v1', MtFactory(Vector)),
...                                 ('v2', MtFactory(Vector))])
>>> s = Shape()
>>> d = {'v1': {'p1': {'x': 20}, 'p2': Point(30, 40)}}
>>> s.merge(d)
>>> assert(s._asdict() == {
...     'v1': {'p1': {'x': 20, 'y': 0}, 'p2': {'x': 30, 'y': 40}},
...     'v2': {'p1': {'x': 0, 'y': 0}, 'p2': {'x': 0, 'y': 0}}})

迭代实例

因为实例是可iterable的(如列表或元组),所以迭代可以工作 同样的方式。值按定义顺序返回:

>>> Point = mutabletuple('Point', 'x y z t')
>>> p = Point(1.0, 42.0, 3.14, 2.71828)
>>> for value in p:
...    print(value)
1.0
42.0
3.14
2.71828

创建和使用实例

因为mutabletuple返回的类型是 python类,可以像创建任何python类一样创建实例。

更改日志

0.1 2015-03-21尼古拉斯•贝苏

  • 初次发布。
  • 为namedlist带来一些额外的特性,以便支持类的嵌套可变元组和递归合并。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在ElasticSearch中将SearchHit转换为Java对象   第三方库类的java重写XmlAdapter   java如何使用动画类获得平滑的动画效果?   Java PDFBox如果文本内容超过PDF的第一页,如何添加新页面?   Java二叉搜索树u根到最近叶的距离   java什么是diff Scanner和BufferedReader   java如何设计不生成并行数组的程序   java多次声明变量会降低执行速度吗?   java如何使用JXLAPI读取下拉列表的值   多线程为什么自定义阻塞队列在Java中不是线程安全的   java在一个变量中每输入1000个单位,就从另一个变量中减去1?   java Mapstruct通用映射器   Java中的类能否确定它是否已被修改?   java如何在MogoOperations聚合函数中定义输出类型?