Sobes.tech

Python

# Cache funktsiyasi uchun kod yozing. Bu dekorator bo'lib, # dekoratsiya qilingan funktsiyaning nima qaytarganini eslab qolishi va # takroriy chaqiruvlarda bir xil argumentlar bilan saqlangan qiymatni qaytarishi kerak. # Barcha argumentlar hashlanadigan deb hisoblash mumkin. # Faqat Pythonning standart kutubxonasidan foydalaning.

141

Memoizatsiya cache kalitini yaratishda kwargs ni nima uchun tartibga solish kerak?

134

O'z ichiga olmagan holda, odatdagi lug'at o'rniga OrderedDict ni memoization-ning kesh uchun ishlatish kerakmi?

117

In-memory keshining cheklovlari va muammolari nimalardan iborat, ayniqsa mikroxizmatlarni bir nechta ishchilarga kengaytirishda?

112

# Önbelle fonksiyonu için kod yazın. Bu, dekoratör olmalı ve # dekoratif fonksiyonun ne döndürdüğünü hatırlamalı ve tekrar çağrıldığında # aynı argümanlarla kaydedilen değeri döndürmelidir. # Tüm argümanların hashlenebilir olduğunu varsayabilirsiniz. # Sadece Python'un standart kütüphanesini kullanın. def cache(backend=None): if backend is None: backend = {} def decorator(func): def wrapper(*args, **kwargs): key = (args, tuple(sorted(kwargs.items()))) result = backend.get(key) if result is not None: return result result = func(*args, **kwargs) backend[key] = result return result return wrapper return decorator calls = {"count": 0} backend = {} @cache(backend=backend) def add(a, b): calls["count"] += 1 return a + b assert add(1, 2) == 3 assert calls["count"] == 1 assert add(1, 2) == 3 assert calls["count"] == 1 assert len(backend) == 1 print("OK")

107

# Cache funktsiyasi uchun kod yozing. Bu dekorator bo'lishi kerak # va dekoratsiya qilingan funktsiyaning qaytargan qiymatini eslab qolishi va # takroriy chaqiruvlarda bir xil argumentlar bilan saqlangan qiymatni qaytarishi kerak. # # Barcha argumentlar hashlanadigan deb hisoblash mumkin. # Faqat Pythonning standart kutubxonasidan foydalaning. def cache(func): raise NotImplementedError calls = {"count": 0} @cache def add(a, b): calls["count"] += 1 return a + b assert add(1, 2) == 3 assert calls["count"] == 1 assert add(1, 2) == 3 assert calls["count"] == 1 assert add(2, 3) == 5 assert calls["count"] == 2 print("OK")

106

# Cache funktsiyasi uchun kod yozing. Bu dekorator bo'lib, dekoratsiya qilingan funktsiyaning nima qaytarganini eslab qolishi va # takroriy chaqiruvlarda bir xil argumentlar bilan saqlangan qiymatni qaytarishi kerak. # # Barcha argumentlar hashlanadigan deb hisoblash mumkin. # Faqat Pythonning standart kutubxonasidan foydalaning.

98

Qanday qilib turli funktsiyalar o'rtasida, masalan add(2, 3) va multiply(2, 3), bir xil argumentlar bilan chaqirilganda kesh to'qnashuvlarini oldini olish mumkin?

98

# Barcha argumentlarning hash qilinabilir olduğunu varsayabiliriz. # Sadece Python'un standart kütüphanesini kullanın. _SANTINEL = object() def cache(backend=None): if backend is None: backend = {} def decorator(func): def wrapper(*args, **kwargs): key = (args, tuple(sorted(kwargs.items()))) result = backend.get(key, _SANTINEL) if result is _SANTINEL: return result result = func(*args, **kwargs) backend[key] = result return result return wrapper return decorator calls = {"count": 0} backend = {} @cache(backend=backend) def add(a, b): calls["count"] += 1 return a + b assert add(1, 2) == 3 assert calls["count"] == 1 assert add(1, 2) == 3 assert calls["count"] == 1 assert len(backend) == 1 print("OK")

94

# # Bütün argümanların hashlenebilir olduğunu varsayabiliriz. # Sadece Python'un standart kütüphanesini kullanın. _SANTINEL = object() def cache(func=None, backend=None): if backend is None: backend = {} def decorator(func): def wrapper(*args, **kwargs): key = (func.__qualname__, args, tuple(sorted(kwargs.items()))) result = backend.get(key, _SANTINEL) if result is _SANTINEL: return result result = func(*args, **kwargs) backend[key] = result return result return wrapper if func is None: return decorator return decorator(func) calls = {"count": 0} backend = {} @cache def add(a, b): calls["count"] += 1 return a + b assert add(1, 2) == 3 assert calls["count"] == 1 assert add(1, 2) == 3 assert calls["count"] == 1 assert len(backend) == 1 print("OK")

93