تقنية

cmp_to_key في بايثون: هل يستدعي المقارنة عند التغليف؟

عداد صفر بعد التغليف
إنشاء المفتاحين. [1] [2]

تغليف القيم ليس تنفيذ المقارنة بينها. [1] [2]

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

لا في مثالنا؛ تنفذ المقارنة عند استعمال < بين المفتاحين. [1] [2]

  • نمرر دالة المقارنة إلى cmp_to_key. [1] [2]
  • بعد K(7) وK(9) يكون العداد 0. [1] [2]
  • المقارنة a < b تعطي True. [1] [2]
  • بعدها يصبح العداد 1. [1] [2]
  • اختبرنا 3.12.14؛ لم نحسب مقارنات فرز. [1] [2]

المثال

from functools import cmp_to_key
calls=[]
def cmp(x,y):
 calls.append((x,y))
 return x-y
K=cmp_to_key(cmp)
a,b=K(7),K(9)
print(len(calls))
print(a < b)
print(len(calls))

[1] [2]

التغليف والمقارنة

المصدر هنا يحتفظ بالدالة والقيمة عند إنشاء الغلاف. فرع المقارنة يستدعي الدالة بالقيمتين، ثم يقارن ناتجها بالصفر. لذلك نقرأ 0 ثم True ثم 1، ويسجل العداد الزوج (7,9). [1] [2]

عداد واحد بعد المقارنة المباشرة
مقارنة واحدة. [1] [2]

النطاق

العداد سجل داخل دالتنا المؤلفة. مقارنة مباشرة أخرى تزيده مجددًا؛ لا نعطي عددًا ثابتًا لاستدعاءات المقارنة أثناء الفرز، ولا نقيس زمن التنفيذ. القيم هنا أعداد صحيحة. [1] [2]

المراجع

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

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

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