You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			1020 B
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			43 lines
		
	
	
		
			1020 B
		
	
	
	
		
			Python
		
	
from collections import UserDict, UserList
 | 
						|
 | 
						|
__all__ = ["LazyDict", "LazyList"]
 | 
						|
 | 
						|
 | 
						|
class LazyDict(UserDict):
 | 
						|
    def __init__(self, data):
 | 
						|
        super().__init__()
 | 
						|
        self.data = data
 | 
						|
 | 
						|
    def __getitem__(self, k):
 | 
						|
        v = self.data[k]
 | 
						|
        if callable(v):
 | 
						|
            v = v(k)
 | 
						|
            self.data[k] = v
 | 
						|
        return v
 | 
						|
 | 
						|
 | 
						|
class LazyList(UserList):
 | 
						|
    def __getitem__(self, k):
 | 
						|
        if isinstance(k, slice):
 | 
						|
            indices = range(*k.indices(len(self)))
 | 
						|
            return [self[i] for i in indices]
 | 
						|
        v = self.data[k]
 | 
						|
        if callable(v):
 | 
						|
            v = v(k)
 | 
						|
            self.data[k] = v
 | 
						|
        return v
 | 
						|
 | 
						|
    def __add__(self, other):
 | 
						|
        if isinstance(other, LazyList):
 | 
						|
            other = list(other)
 | 
						|
        elif isinstance(other, list):
 | 
						|
            pass
 | 
						|
        else:
 | 
						|
            return NotImplemented
 | 
						|
        return list(self) + other
 | 
						|
 | 
						|
    def __radd__(self, other):
 | 
						|
        if not isinstance(other, list):
 | 
						|
            return NotImplemented
 | 
						|
        return other + list(self)
 |