تكرار السؤال: …
الإجابة المختصرة
قِس أولًا، ثم قلل الكائنات المؤقتة غير الضرورية، واستخدم البنى والدوال المدمجة المكتوبة بـ C، أو انقل الحساب إلى NumPy أو امتداد مترجم إذا أثبت الـ profiler أن الحلقة هي عنق الزجاجة.
الشرح
كل كائن في Python له عبء ذاكرة ووقت. تقنيات شائعة: نقل العمليات الثابتة خارج الحلقة، واستخدام الدوال المدمجة (sum و any و sorted) بدل الحلقات اليدوية، واستخدام __slots__ أو tuples للكائنات الصغيرة الكثيرة، واستخدام array أو NumPy للأعداد الكثيرة بدل list من كائنات int. ومنذ Python 3.11 أصبح المفسر نفسه أسرع بفضل التخصيص التكيفي. لكن ابدأ دائمًا بتحسين الخوارزمية و I/O؛ فالتحسينات الدقيقة تضر القراءة وقد لا تؤثر.
مثال بالكود
import numpy as np
# بطيء: ملايين الكائنات من نوع float
prices = [p * 1.14 for p in raw_prices]
# أسرع: عملية واحدة على مصفوفة متجاورة في C
prices = np.asarray(raw_prices) * 1.14
# نقل الثابت خارج الحلقة
rate = config.tax_rate
total = sum(item.price * rate for item in items)أخطاء شائعة
- تطبيق micro-optimizations تضر القراءة قبل التأكد من أنها عنق الزجاجة.
- تجاهل أن المشكلة في خوارزمية O(n²) لا في عبء الكائنات.