私は計算に非常に大規模で高価な配列を持っています。私はその宣言をオプションにしたいと思っていますが、理想的には私のコード全体を書き直す必要はありません。それが今であるかのPythonの遅延変数?または、高価な計算が遅れる
例:私がやりたいものの
x = function_that_generates_huge_array_slowly(0)
y = function_that_generates_huge_array_slowly(1)
例:
x = lambda: function_that_generates_huge_array_slowly(0)
y = lambda: function_that_generates_huge_array_slowly(1)
z = x * 5 # this doesn't work because lambda is a function
# is there something that would make this line behave like
# z = x() * 5?
g = x * 6
、上記のようにラムダを使用して所望の効果の一つを達成するが - の計算配列は必要になるまで遅延されます。変数 "x"を複数回使用する場合は、毎回計算する必要があります。私は一度だけ計算したいと思う。
EDIT: さらに検索した後、クラス内に「遅延」属性(例:http://code.activestate.com/recipes/131495-lazy-attributes/)を入れたいと思うように見えます。別のクラスを作ることなく、何か似たようなことをする方法はないと思いますか?
EDIT2:私は解決策の一部を実装しようとしているが、私は違いを理解していないので、私が問題に実行しています:
class sample(object):
def __init__(self):
class one(object):
def __get__(self, obj, type=None):
print "computing ..."
obj.one = 1
return 1
self.one = one()
と
class sample(object):
class one(object):
def __get__(self, obj, type=None):
print "computing ... "
obj.one = 1
return 1
one = one()
を
高価な変数はクラスの一部であることが意図されているので、これらのバリエーションが私が探しているものだと思います。
http://stackoverflow.com/questions/5078726/setting-a-property-inside-a-python-methodは私がやろうとしていることに対して怠惰をより効果的に実装します – keflavich