用法:
@functools.cached_property(func)
將類的方法轉換為屬性,其值被計算一次,然後在實例的生命周期內作為普通屬性緩存。類似於
property()
,但增加了緩存。對於實例的昂貴計算屬性很有用,否則這些屬性實際上是不可變的。例子:
class DataSet: def __init__(self, sequence_of_numbers): self._data = tuple(sequence_of_numbers) @cached_property def stdev(self): return statistics.stdev(self._data)
cached_property()
的機製與property()
有所不同。除非定義了 setter,否則常規屬性會阻止屬性寫入。相反,cached_property
允許寫入。cached_property
裝飾器僅在查找時運行,並且僅在不存在同名屬性時運行。當它運行時,cached_property
會寫入具有相同名稱的屬性。隨後的屬性讀取和寫入優先於cached_property
方法,它的工作方式與普通屬性一樣。可以通過刪除屬性來清除緩存的值。這允許
cached_property
方法再次運行。注意,這個裝飾器會幹擾PEP 412key-sharing 字典。這意味著實例字典可以占用比平時更多的空間。
此外,此裝飾器要求每個實例上的
__dict__
屬性是可變映射。這意味著它不適用於某些類型,例如元類(因為類型實例上的__dict__
屬性是類命名空間的隻讀代理),以及那些指定__slots__
而不包括__dict__
作為其中之一的類型定義的槽(因為這樣的類根本不提供__dict__
屬性)。如果可變映射不可用或需要節省空間的 key 共享,則可以通過在
cache()
之上堆疊property()
來實現類似於cached_property()
的效果:class DataSet: def __init__(self, sequence_of_numbers): self._data = sequence_of_numbers @property @cache def stdev(self): return statistics.stdev(self._data)
3.8 版中的新函數。
相關用法
- Python functools.cache用法及代碼示例
- Python functools.wraps用法及代碼示例
- Python functools.singledispatchmethod用法及代碼示例
- Python functools.singledispatch用法及代碼示例
- Python functools.partial用法及代碼示例
- Python functools.partialmethod用法及代碼示例
- Python functools.lru_cache用法及代碼示例
- Python functools.reduce用法及代碼示例
- Python functools.total_ordering用法及代碼示例
- Python functools.wraps()用法及代碼示例
- Python dict fromkeys()用法及代碼示例
- Python frexp()用法及代碼示例
- Python float轉exponential用法及代碼示例
- Python calendar firstweekday()用法及代碼示例
- Python fsum()用法及代碼示例
- Python float.is_integer用法及代碼示例
- Python format()用法及代碼示例
- Python calendar formatmonth()用法及代碼示例
- Python filecmp.cmpfiles()用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 functools.cached_property。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。