Код: Выделить всё
class Lazy:
def __init__(self, factory):
self._factory = factory
self._value = None
def _init(self):
if self._value is None:
self._value = self._factory()
def __getattr__(self, name):
self._init()
return getattr(self._value, name)
tmp = []
for el in [1, 2, 3]:
tmp.append(
Lazy(lambda : {"value":el})
)
print(tmp[0].get("value"))
Однако:
Код: Выделить всё
class Lazy:
def __init__(self, factory):
self._factory = factory
self._value = None
def _init(self):
if self._value is None:
self._value = self._factory()
def __getattr__(self, name):
self._init()
return getattr(self._value, name)
tmp = []
for el in [1, 2, 3]:
tmp.append(
Lazy(lambda el=el : {"value":el})
)
print(tmp[0].get("value"))
Теперь, если бы элемент `el` цикла for действительно был передан по ссылке, я бы ожидал такого кода:
Код: Выделить всё
tmp = [1, 2, 3]
for el in tmp:
el = 1
print(tmp)
Подробнее здесь: https://stackoverflow.com/questions/798 ... in-lambdas
Мобильная версия