تقنية

lru_cache في بايثون: هل typed يفصل أنواع عناصر الصف؟

صفان متساويان يشتركان في نتيجة المخزن
الصف. [1] [2]

الوسيط صف، وعنصره قد يحمل نوعًا آخر. [1] [2]

الخلاصة السريعة

الخيار يميز أنواع الوسائط المباشرة، لا أنواع محتوياتها. [1] [2]

  • الوسيط في النداءين من نوع tuple. [1] [2]
  • النداء الأول يعيد int. [1] [2]
  • الثاني يعيد int المخزنة، رغم عنصره العشري. [1] [2]
  • عدد الإصابات في المخزن 1. [1] [2]
  • اختبرنا typed=True في 3.12.14. [1] [2]

المثال

from functools import lru_cache
@lru_cache(typed=True)
def inner_type(x):
    return type(x[0]).__name__
print(inner_type((7,)))
print(inner_type((7.0,)))
print(inner_type.cache_info().hits)

[1] [2]

القيمة والنوع

المصدر هنا يضيف نوع الوسيط المباشر إلى المفتاح. صفا مثالنا متساويان في القيم، ونوعهما واحد. لذلك المخرجات int ثم int ثم 1؛ الجسم لا يعاد في النداء الثاني. [1] [2]

نوعا الوسيط المباشر ينتجان نتيجتين
المباشر. [1] [2]

مقارنة والنطاق

في دالة مستقلة تعيد type(x).__name__ وبالخيار نفسه، تمرير 7 ثم 7.0 مباشرة يعيد int ثم float. نقصر المثال على هذه القيم؛ لا نقيس الأداء أو التزامن. [1] [2]

المراجع

  1. Python 3.12: lru_cache typed arguments
  2. CPython 3.12.14: native cache key
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.