通过这些实际场景的应用,可以看出 MappingProxyType 在维护数据完整性和提高系统稳定性方面扮演着关键角色。 5、进阶:自定义MappingProxyType类 🧪 5.1 继承与扩展 在Python中,虽然 types.MappingProxyType 是一个最终类(final class) ,不能直接继承,但我们可以通过封装或使用元编程技术来创建类似的行为。下面展示如何通...
下面是一个简单的示例应用,使用MappingProxy对象来共享数据给多个线程。 importthreadingfromtypesimportMappingProxyType data={'count':0}read_only_data=MappingProxyType(data)defincrement():for_inrange(100000):data['count']+=1threads=[]for_inrange(5):thread=threading.Thread(target=increment)threads.append(...
标准库提供的映射类型都是可变的,不过有时也需要防止用户意外更改映射。types模块提供的MappingProxyType是一个包装类,把传入的映射包装成一个mappingproxy实例,这是原映射的动态代理,只可读取。 这意味着,对原映射的更新将体现在mappingproxy实例身上,但是不能通过mappingproxy实例更改映射。 MappingProxyType根据dict对象构建...
标准库里所有的映射类型都是可变的,但有时候你会有这样的需求,比如不能让用户错误地修改某个映射。 从Python3.3开始,types模块中引入了一个封装类名叫MappingProxyType。如果给这个类一个映射,它会返回一个只读的映射视图。 示例如下: >>> d = {'dw': 1} >>> a = MappingProxyType(d) >>> a mappingprox...
此外,MappingProxyType可以用来创建不可变映射对象 dict和set的实现依赖散列表。散列表利用空间换取时间,这使得dict和set具有相当高的效率,与此同时,散列表的使用也使得在dict和set中讨论元素顺序变得没有意义并且并不是所有元素都可以作为dict的键或者set的元素。
mt = MappingProxyType(d) print(mt[1]) d[2] = "zheng ya nan" print(mt[2]) 集合 集合有set和它的不可变姊妹类型frozenset。集合的本质是许多唯一对象的聚集,因此它可以去重。 set/frozenset中的元素必须是可散列的,而set本身不可散列,frozenset可以。因此可以创建一个包含多个frozenset的set:) ...
types.MappingProxyType:用于制作只读字典的包装器 Python 中的字典:总结 数组数据结构 列表:可变动态数组 元组:不可变容器 array.array:基本类型数组 str:Unicode 字符的不可变数组 bytes:不可变的单字节数组 bytearray:单字节的可变数组 Python 中的数组:总结 ...
mappingproxy({'_ _doc_ _': None, '_ _dict_ _': <attribute '_ _dict_ _' of 'CC' objects>, '_ _weakref_ _': <attribute '_ _weakref_ _' of 'CC' objects>, 'printXY': <function CC.printXY at 0x0370D2B8>,'_ _module_ _': '_ _main_ _', ...
实际上 Python自带了这个功能,就是types.MappingProxyType。使用它,可以轻易实现一个不能修改的字典: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 from typesimportMappingProxyType info={'name':'kingname','salary':99999}safe_info=MappingProxyType(info)print('kingname 的月薪是:',safe_info['salary'...
mappingproxy({'__new__': <staticmethod at 0x7f203c4e6be0>, ...'x': <recordclass.dataobject.dataslotgetset at 0x7f203c55c690>,'y': <recordclass.dataobject.dataslotgetset at 0x7f203c55c670>,'z': <recordclass.dataobject.dataslotgetset at 0x7f203c55c410>})大量实例占用的内存量在...