PEP 417的dictproxy(不可变dicts)适用于所有人

dictproxyhack的Python项目详细描述


向所有人公开不可变的dictproxy类型(?)python的版本。

PEP416要求输入frozendict类型,但被拒绝。另一种选择是 要公开dictproxy,用于且不可变对象的 {TT4}$,它封装现有的DICT并提供只读接口 为了它。这种类型自2.2以来就已经存在,但它从未有过Python之地。 构造函数。

直到现在。但只有3.3+。这对我们中的一些人没什么帮助。

这个模块笨拙地将同一类型的内容公开给先前版本的python。

用法

from dictproxyhack import dictproxy

myproxy = dictproxy(dict(foo="bar"))
print(myproxy['foo'])
myproxy['baz'] = "quux"  # TypeError

因为代理持有对底层dict的引用(但不提供 任何恢复的方法),您都可以轻松地实现frozendict

def frozendict(*args, **kwargs):
    return dictproxy(dict(*args, **kwargs))

不如直接把它放在你需要的地方,真的。

依赖关系

Python。应该在任何地方工作。也许吧。

python 3.3+上,您将得到真正的mappingproxytype,它位于 types模块为MappingProxyType

cpython 2.5+上,您会得到一个伪类,该类强制实例化 dictproxy对象通过ctypes诡计。

上,您可以得到一个常规类,它包装一个dict和 不实现映射接口的任何变异部分。不是很好 解决方案,但足够好,只适用于直到您最喜欢的端口赶上 有3.3的标准库。

在2.6之前的non-c python端口上,可以得到dict, 因为^ {tt13}$abc甚至不存在。对不起的。

shim类还愚弄isinstanceissubclass,因此 打字检查在任何地方都应该同样糟糕。

实际上我只在cpython 2.6、2.7、3.2、3.3和pypy上尝试过这个库 2.1,但我有兴趣听听它在其他地方是否有效。

有问题

不要子类化dictproxy。python 3.3+不会让你,而其他的 版本的使用非常可疑。

dictproxy已在3.3+中重命名为mappingproxy,因此不要依赖于 repr匹配不同版本或任何内容。(使用 此模块的旧名称。)

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

推荐PyPI第三方库


热门话题
java提供了大量的Quartz工作线程   来自SOAPException的java抛出超时异常   java通过REST web服务同步PostgreSQL过程调用   java Hibernate:在关联表中设置值   javaimapidlechanneladapterjavax。邮政AuthenticationFailedException:[警报]同时连接太多   JavaApacheStorm:stormkafkamonitor脚本引发异常   java将jar链接到战争   Matlab与Java的集成方法   安卓公司。谷歌。ads.AdView未能实例化java。lang.ClassNotFoundException:org。json。JSONException   “String forecastStr=mForecastAdapter.getItem(position);”行中出现java错误阳光工程   java如何将Mono中的列表属性作为流量进行操作?   java DecimalFormat类不必要地给出整数   java@IfProfileValue两个spring配置文件   java如何使用SwingWorker创建多线程?   java从扩展SwingWorker的内部类触发事件   java二叉树高度实现