在Python中如何快速创建一个只读字典?

不少人喜欢在 Python 项目中,使用字典来存放各种数据。虽然这不是一个好习惯,但是对于少量数据来说,用字典无疑是最简单方便的做法。但前提是,不要一不小心把字典里面的值给覆盖了。

成都创新互联公司长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为富拉尔基企业提供专业的成都网站设计、成都做网站富拉尔基网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

我们知道,当我们向字典添加数据的时候:

 
 
 
 
  1. a = {'name': 'kingname', 'salary': 99999} 
  2. a['address'] = '上海' 

当我们读取字典的时候,一般写作:

 
 
 
 
  1. a['address'] 

所以在代码里面,确实存在一不小心把字典覆盖了的情况,例如:

 
 
 
 
  1. is_rich_man = a['salary'] == 99999 

正常情况下,is_rich_man应该等于 True 或者 False。但如果漏写了一个等号,变成:

 
 
 
 
  1. is_rich_man = a['salary'] = 99999 

那么,字典里面的数据就会被覆盖。但代码并不会报错,如下图所示:

所以,我们是否有什么办法,实现一个一旦初始化,就不能修改的字典呢?

实际上 Python自带了这个功能,就是types.MappingProxyType。使用它,可以轻易实现一个不能修改的字典:

 
 
 
 
  1. from types import MappingProxyType 
  2.  
  3. info = {'name': 'kingname', 'salary': 99999} 
  4. safe_info = MappingProxyType(info) 
  5. print('kingname 的月薪是:', safe_info['salary']) 
  6. safe_info['salary'] = 0 

运行效果如下图所示:

MappingProxyType像是挡在字典前面的一面盾牌,从前面是无法修改数据的,但是,如果你确实需要修改数据,那么你可以直接修改原始的字典,此时,修改会反映到 MappingProxyType 处理过的对象上面,如下图所示:

这样,你在处理数据时,进可攻,退可守,让可信任的代码修改数据,防止不信任的代码修改数据,一举两得。

 

网站标题:在Python中如何快速创建一个只读字典?
浏览地址:http://www.shufengxianlan.com/qtweb/news36/15036.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联