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

Bagaimana untuk membuat panggilan kaedah cache dalam Python?

王林
Lepaskan: 2023-09-10 17:37:02
ke hadapan
788 orang telah melayarinya

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
Salin selepas log masuk

Alat fungsi import

Untuk mengimport functools −

import functools
Salin selepas log masuk

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)
Salin selepas log masuk

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')
Salin selepas log masuk

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())
Salin selepas log masuk

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)
Salin selepas log masuk

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.
Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan