في تجربتنا، lru_cache لا تحفظ ValueError الخارج من الدالة. [1] [2]
الخلاصة السريعة
لا؛ الجسم يُستدعى مجددًا هنا. [1] [2]
- في تجربتنا، lru_cache لا تحفظ ValueError الخارج من الدالة. [1] [2]
- على CPython 3.12.14، maxsize=None؛ reject تسجل x ثم ترفع ValueError. [1] [2]
- نداءان reject(2): خطآن وسجل [2,2]؛ الجسم عمل مرتين. [1] [2]
- hits=0، misses=2، currsize=0؛ لم تُحفظ نتيجة. [1] [2]
- تحكم accept(2) مرتين: [5,5]، استدعاء واحد، hits=1، misses=1، currsize=1؛ دالتنا تعيد x+3. [1] [2]
خطأ خارج الدالة
في تجربتنا، lru_cache لا تحفظ ValueError الخارج من الدالة. [1] [2]
إعداد التجربة
على CPython 3.12.14، maxsize=None؛ reject تسجل x ثم ترفع ValueError. [1] [2]
نداءان فاشلان
نداءان reject(2): خطآن وسجل [2,2]؛ الجسم عمل مرتين. [1] [2]
from functools import lru_cache calls=[] @lru_cache(maxsize=None) def reject(x): calls.append(x) raise ValueError("leaf") for _ in range(2): try:reject(2) except ValueError:print("error") print(calls,reject.cache_info()) [1] [2]
![accept(2) مرتين: سجل [2] وحجم المخزن 1.](https://images.bahralolom.com/assets/local-2000-20261012/BA-1501/python-cache-exception-values.png)
المخزن والتحكم
hits=0، misses=2، currsize=0؛ لم تُحفظ نتيجة. [1] [2]
ok_calls=[] @lru_cache(maxsize=None) def accept(x): ok_calls.append(x) return x+3 print(accept(2),accept(2)) print(ok_calls,accept.cache_info()) [1] [2]
تحكم accept(2) مرتين: [5,5]، استدعاء واحد، hits=1، misses=1، currsize=1؛ دالتنا تعيد x+3. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![reject(2) مرتين: سجل [2,2] وحجم المخزن 0.](https://images.bahralolom.com/assets/local-2000-20261012/BA-1501/python-cache-exception-main.png)