mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 13:11:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			31 lines
		
	
	
	
		
			743 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			31 lines
		
	
	
	
		
			743 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import collections | ||
|  | 
 | ||
|  | 
 | ||
|  | # from jaraco.collections 3.3 | ||
|  | class FreezableDefaultDict(collections.defaultdict): | ||
|  |     """
 | ||
|  |     Often it is desirable to prevent the mutation of | ||
|  |     a default dict after its initial construction, such | ||
|  |     as to prevent mutation during iteration. | ||
|  | 
 | ||
|  |     >>> dd = FreezableDefaultDict(list) | ||
|  |     >>> dd[0].append('1') | ||
|  |     >>> dd.freeze() | ||
|  |     >>> dd[1] | ||
|  |     [] | ||
|  |     >>> len(dd) | ||
|  |     1 | ||
|  |     """
 | ||
|  | 
 | ||
|  |     def __missing__(self, key): | ||
|  |         return getattr(self, '_frozen', super().__missing__)(key) | ||
|  | 
 | ||
|  |     def freeze(self): | ||
|  |         self._frozen = lambda key: self.default_factory() | ||
|  | 
 | ||
|  | 
 | ||
|  | class Pair(collections.namedtuple('Pair', 'name value')): | ||
|  |     @classmethod | ||
|  |     def parse(cls, text): | ||
|  |         return cls(*map(str.strip, text.split("=", 1))) |