python 3.5の値を遅延計算するためのコードを以下に示します。私は同じ結果で@cached_property
decoratorを試したので、これを簡単にするために使用します。次からPythonで引数として渡す際の遅延プロパティの評価を回避する方法
def bar(some_parameter, another_parameter):
if some_parameter != 10:
print(some_parameter)
else:
print(another_parameter)
:私はそれがこの例のように、終わるの内部に使用されていない場合でも、関数の引数として渡したときに
class Foo:
@property
def expensive_object(self):
if not hasattr(self, "_expensive_object"):
print("Lengthy initialization routine")
self._expensive_object = 2
return self._expensive_object
問題は、それが評価されることをです出力されただけで評価されていることがわかりますが、コードがそれを使用しようとしていないため、厳密には必要ではありませんでした。
In [23]: foo1 = Foo()
...: bar(3, foo1.expensive_object)
Lengthy initialization routine
3
In [24]: bar(3, foo1.expensive_object)
3
は私のスクリプトは、これまで評価しなくても実行することができている状況でありますが、それはので、このような場合の、とにかくそれをやってしまいます。 パラメータを除外することも現実的ではありません。私はまた、組み立てられたメンバオブジェクトの__init__
でそれを使用します。
可能であれば、実際に読み取ったときに評価する必要があるという点で、プロパティをさらに怠惰にしたいと考えています。
それはlazierにする唯一の方法は、それを作ることです'bar'が必要なときに呼び出す関数です。関数の引数は常にすぐに評価されます。 – chepner