Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat panggilan kaedah cache dalam Python?

Bagaimana untuk membuat panggilan kaedah cache dalam Python?

王林
王林ke hadapan
2023-09-10 17:37:02664semak imbas

Bagaimana untuk membuat panggilan kaedah cache dalam Python?

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 -

Pasang functools

Untuk memasang modul functools, gunakan pip −

pip install functools

Alat fungsi import

Untuk mengimport functools −

import functools

Mari kita fahami caching satu persatu -

cached_property()

Berguna untuk sifat pengiraan mahal bagi keadaan yang sebaliknya akan kekal dengan berkesan.

Kaedah

cached_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 bagi

Contoh

ialah:

Contoh

Mari 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

Kaedah

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 bagi

Contoh

ialah:

Contoh

Mari 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())

Output

[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)

Contoh caching

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam