リストをPythonで遅延評価することは可能ですか?
例えば
a = 1
list = [a]
print list
#[1]
a = 2
print list
#[1]
リストが遅延評価するように設定されている場合、最終行は [2] になります。
リストをPythonで遅延評価することは可能ですか?
例えば
a = 1
list = [a]
print list
#[1]
a = 2
print list
#[1]
リストが遅延評価するように設定されている場合、最終行は [2] になります。
本物の遅延リストの実装を探しているときにこの投稿に出くわしましたが、試してみるのは楽しいことのように思えました。
次の実装は、基本的に最初に求められたことを行います。
from collections import Sequence
class LazyClosureSequence(Sequence):
def __init__(self, get_items):
self._get_items = get_items
def __getitem__(self, i):
return self._get_items()[i]
def __len__(self):
return len(self._get_items())
def __repr__(self):
return repr(self._get_items())
次のように使用します。
>>> a = 1
>>> l = LazyClosureSequence(lambda: [a])
>>> print l
[1]
>>> a = 2
>>> print l
[2]
これは明らかに恐ろしいことです。
Python は、一般的にそれほど怠け者ではありません。
ジェネレーターを使用して遅延データ構造 (無限リストなど) をエミュレートできますが、通常のリスト構文などを使用する限り、遅延は発生しません。