在 Python 中如何快速創(chuàng)建一個只讀字典?
不少人喜歡在 Python 項目中,使用字典來存放各種數據。雖然這不是一個好習慣,但是對于少量數據來說,用字典無疑是最簡單方便的做法。但前提是,不要一不小心把字典里面的值給覆蓋了。
我們知道,當我們向字典添加數據的時候:
- a = {'name': 'kingname', 'salary': 99999}
- a['address'] = '上海'
當我們讀取字典的時候,一般寫作:
- a['address']
所以在代碼里面,確實存在一不小心把字典覆蓋了的情況,例如:
- is_rich_man = a['salary'] == 99999
正常情況下,is_rich_man應該等于 True 或者 False。但如果漏寫了一個等號,變成:
- is_rich_man = a['salary'] = 99999
那么,字典里面的數據就會被覆蓋。但代碼并不會報錯,如下圖所示:
所以,我們是否有什么辦法,實現(xiàn)一個一旦初始化,就不能修改的字典呢?
實際上 Python自帶了這個功能,就是types.MappingProxyType。使用它,可以輕易實現(xiàn)一個不能修改的字典:
- from types import MappingProxyType
- info = {'name': 'kingname', 'salary': 99999}
- safe_info = MappingProxyType(info)
- print('kingname 的月薪是:', safe_info['salary'])
- safe_info['salary'] = 0
運行效果如下圖所示:
MappingProxyType像是擋在字典前面的一面盾牌,從前面是無法修改數據的,但是,如果你確實需要修改數據,那么你可以直接修改原始的字典,此時,修改會反映到 MappingProxyType 處理過的對象上面,如下圖所示:
這樣,你在處理數據時,進可攻,退可守,讓可信任的代碼修改數據,防止不信任的代碼修改數據,一舉兩得。