في CPython 3.12.14، merge قد تمرر بقية مسار وحيد دون استدعاء key لكل قيمة؛ ليست خطوة تحقق لكل عنصر. [1] [2]
الخلاصة السريعة
لا؛ عدد النداءات قد يقل عن العناصر. [1] [2]
- في CPython 3.12.14، merge قد تمرر بقية مسار وحيد دون استدعاء key لكل قيمة؛ ليست خطوة تحقق لكل عنصر. [1] [2]
- مدخلنا المرتب [2,5,9]؛ key تسجل القيمة ثم تعيدها للمقارنة. [1] [2]
- list(merge([2,5,9],key=key)) تعطي [2,5,9]؛ calls=[2] فقط. [1] [2]
- تحكم بمسارين [2,5,9] و[4]: الناتج [2,4,5,9]، وسجل المفتاح [2,4,5]؛ 9 خرجت دون نداء. [1] [2]
- الكود يمرر البقية عند بقاء مكرر واحد. نحصر الأعداد والسجلات في تجربتنا؛ لا نعمم عدد النداءات على مدخلات أخرى. [1] [2]
المفتاح ليس تحققًا
في CPython 3.12.14، merge قد تمرر بقية مسار وحيد دون استدعاء key لكل قيمة؛ ليست خطوة تحقق لكل عنصر. [1] [2]
مدخل مرتب
مدخلنا المرتب [2,5,9]؛ key تسجل القيمة ثم تعيدها للمقارنة. [1] [2]
مسار واحد
list(merge([2,5,9],key=key)) تعطي [2,5,9]؛ calls=[2] فقط. [1] [2]
from heapq import merge calls=[] def key(value):calls.append(value);return value print(list(merge([2,5,9],key=key)),calls) [1] [2]
![Two streams [2,5,9] and [4]; key calls: [2,4,5].](https://images.bahralolom.com/assets/local-2000-20261012/BA-1646/python-merge-key-calls-values.png)
مساران والتحكم
تحكم بمسارين [2,5,9] و[4]: الناتج [2,4,5,9]، وسجل المفتاح [2,4,5]؛ 9 خرجت دون نداء. [1] [2]
control_calls=[] def control_key(value):control_calls.append(value);return value print(list(merge([2,5,9],[4],key=control_key)),control_calls) [1] [2]
الكود يمرر البقية عند بقاء مكرر واحد. نحصر الأعداد والسجلات في تجربتنا؛ لا نعمم عدد النداءات على مدخلات أخرى. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![One stream [2,5,9]; key calls: [2].](https://images.bahralolom.com/assets/local-2000-20261012/BA-1646/python-merge-key-calls-main.png)