Dua alatan untuk kaedah caching ialah functools.cached_property() dan functools.lru_cache(). Kedua-dua modul adalah sebahagian daripada modul functools. Modul functools adalah untuk fungsi peringkat tinggi: fungsi yang bertindak pada atau mengembalikan fungsi lain. Mari pasang dan import modul functools dahulu -
Untuk memasang modul functools, gunakan pip −
pip install functools
Untuk mengimport functools −
import functools
Mari kita fahami caching satu persatu -
Berguna untuk sifat pengiraan mahal bagi keadaan yang sebaliknya akan kekal dengan berkesan.
Kaedahcached_property hanya tersedia tanpa sebarang parameter. Ia tidak mencipta rujukan kepada contoh. Keputusan kaedah cache hanya dikekalkan semasa kejadian aktif.
Kelebihan ini ialah hasil kaedah cache akan dikeluarkan serta-merta apabila contoh tidak lagi digunakan. Kelemahannya ialah jika contoh terkumpul, hasil kaedah terkumpul juga terkumpul. Mereka boleh berkembang tanpa had.
Terjemahan bahasa Cina bagiMari kita lihat contoh -
class DataSet: def __init__(self, sequence_of_numbers): self._data = tuple(sequence_of_numbers) @cached_property def stdev(self): return statistics.stdev(self._data)
lru_cache sesuai untuk kaedah dengan parameter boleh cincang. Melainkan usaha khas dibuat untuk lulus rujukan yang lemah, ia mewujudkan rujukan kepada contoh.
Kelebihan algoritma yang paling kurang digunakan baru-baru ini ialah cache dihadkan kepada saiz maksimum yang ditentukan. Kelemahannya ialah keadaan kekal aktif sehingga ia tamat tempoh daripada cache atau cache dikosongkan.
Terjemahan bahasa Cina bagiMari kita lihat contoh -
@lru_cache def count_vowels(sentence): return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou')
Contoh penggunaan cache untuk mengira nombor Fibonacci −
from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) print([fib(n) for n in range(16)]) print(fib.cache_info())
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610] CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)
Sekarang, mari lihat contoh lengkap functool cached_property() dan lru_cache -
from functools import lru_cache from functools import cached_property class Weather: "Lookup weather information on a government website" def __init__(self, station_id): self._station_id = station_id # The _station_id is private and immutable def current_temperature(self): "Latest hourly observation" # Do not cache this because old results # can be out of date. @cached_property def location(self): "Return the longitude/latitude coordinates of the station" # Result only depends on the station_id @lru_cache(maxsize=20) def historic_rainfall(self, date, units='mm'): "Rainfall on a given date" # Depends on the station_id, date, and units.
Atas ialah kandungan terperinci Bagaimana untuk membuat panggilan kaedah cache dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!