递归地将列表转换为元组、将集合转换为frozensets、将dict转换为mappingproxy等。

freezedata的Python项目详细描述


递归地将list转换为tupleset转换为frozensetdictmappingproxy等。

示例用法:

importfreezedatadata=[{'a':[1,2,3],'b':{1,2,3}},{1:1,2:2,3:3}]frozendata=freezedata.freeze_data(data)print(frozendata)>>(mappingproxy({'a':(1,2,3),'b':frozenset({1,2,3})}),mappingproxy({1:1,2:2,3:3}))

这是一个只读的数据结构,也就是说,没有直接的方法来改变它 来自frozendata本身的数据结构(不使用某些特殊模块(gcinspect))。

例如:

frozendata[0]['a'][0]=4>>TypeError:'tuple'objectdoesnotsupportitemassignmentdelfrozendata[1][1]>>TypeError:'mappingproxy'objectdoesnotsupportitemdeletion

注意:因为mappingproxy不是可哈希的冻结数据 包含mappingproxy(即基于dict)的结构将不会 可散列:

hash(frozendata)>>TypeError:unhashabletype:'mappingproxy'

另一方面,如果冻结的数据结构只包含散列元素,则 结构也将是散列的(并且是不可变的):

frozendata=freezedata.freeze_data([[1,2,3],{4,5,6}])print(frozendata)>>((1,2,3),frozenset({4,5,6}))hash(frozendata)>>-11948691520864899

放松要求(接受函数、模块、类和实例):

函数、模块(用户创建的)类和实例在python中是可变的,因此 既不是不可变的,也不是只读的。默认情况下,使用这些将导致错误,但设置 参数allow作为functionsmodules,^{tt16}的一个、多个或全部$ 和instances,它们可以在新的数据结构中使用。

函数在python中具有可变属性,但有时您仍然希望 不会影响父数据结构/父函数的新数据结构。 通过设置allow='functions'allow=['functions'],新的数据结构将 包含包含函数及其公共属性的copy

deffunc(n):returnn*2func.a='a'data=[func]frozendata=freezedata.freeze_data(data,allow='functions')data[0]==frozendata[0]>>Falsefrozendata[0].a='b'print(data[0].a,frozendata[0].a)>>ab

modules将被转换为namedtuple,如果您正在冻结模块。 如果模块在数据结构中,但不是顶层,则默认情况下会引发错误。 如果设置了allow={'modules'},则允许非顶级模块并保持不变。

类和类实例可以转换为namedtuple,并在 通过设置allow={'classes', 'instances}或仅设置一个来冻结数据结构,例如 allow={'classes'},根据需要。通过转换为namedtuple,信息可能会丢失,如 带有前导下划线的属性将被忽略:

classTest:a=1def__init__(self,a):self.a=atest=Test(2)frozendata=freezedata.freeze_data([Test,test],allow={'classes','instances'})print(frozendata)>>(Test(a=1),Test(a=2))print(type(frozendata[0]),type(frozendata[1]))>><class'freezedata.freezedata.Test'> <class 'freezedata.freezedata.Test'>  # two namedtuples

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

推荐PyPI第三方库


热门话题
JAXB可以将ArrayList作为逗号分隔的值输出吗?   java使用bcel将一个内部类移动到另一个外部类   java无法识别Lucene MoreLikeThis中的错误   安卓如何在Frida中将动态类转换为json或java文件   java如何使用Struts2在blob类型的列中保存我的sql中的图像?   使用mavenreleaseplugin将java maven发布到nexus 3.0.1失败   java这是正确的方法吗?   Windows上的java Runner不工作   找不到java Hibernate+Spring xml映射   java如何访问WMI查询的数据(通过JNA)SAFEARRAY结果   java如何在本地导入库而不使用Maven中的Nexus?   java渐变本地项目依赖项   使用URLFetchService/URL Google appengine for java