البرمجة

أداء list comprehensions vs generator expressions

عند النظر إلى الأمثلة التي ذكرتها، يتضح أن عملية تكوين القائمة (list comprehension) تعمل بشكل أسرع من تعبير المولد (generator expression) في هذا السياق المحدد. السبب وراء هذا الفارق في الأداء يعود إلى الطريقة التي تتعامل بها Python مع هذين النوعين من التعبيرات.

في حالة list comprehension، Python تنشئ قائمة كاملة من العناصر (في هذه الحالة، قائمة الأعداد من 0 إلى 99) وتخزنها في الذاكرة، ثم تقوم بدمج العناصر باستخدام الدالة join، وهذا يعني أن Python تقوم بإنشاء وتخزين القائمة كاملة في الذاكرة قبل تطبيق الدالة join عليها.

أما في حالة generator expression، Python لا تقوم بإنشاء قائمة كاملة في الذاكرة. بدلاً من ذلك، تنشئ Python مولدًا(generator) يولد القيم تدريجياً أثناء التكرار عليه، وهذا يعني أن Python لا تقوم بإنشاء قائمة كاملة في الذاكرة بل تقوم بإنشاء قيمة واحدة في كل مرة. وعند استخدام الدالة join، يتم تطبيقها على القيم التي تنشأ بواسطة المولد تدريجيًا دون الحاجة إلى تخزينها في قائمة كاملة.

لذلك، عندما يتم استدعاء الدالة join في حالة list comprehension، تكون جميع العناصر قد تم إنشاؤها وتخزينها في الذاكرة بالفعل، مما يسهل ويسرع عملية الدمج. أما في حالة generator expression، تنشأ القيم تدريجيًا أثناء الدورة، وتتم عملية الدمج بين القيم تدريجيًا أيضًا دون الحاجة إلى تخزينها بشكل كامل في الذاكرة، مما يجعلها أبطأ بعض الشيء.

المزيد من المعلومات

بالتأكيد، هنا بعض المعلومات الإضافية:

  1. توافق مع الإصدارات: في Python 2، كانت تعبيرات المولد (generator expressions) أبطأ من list comprehensions في بعض الحالات. ولكن في Python 3، تم تحسين أداء تعبيرات المولد بحيث أصبحت أكثر كفاءة وتنافسية مع list comprehensions.

  2. استخدام الذاكرة: list comprehensions تستهلك كمية أكبر من الذاكرة بسبب حاجتها إلى تخزين جميع العناصر في الذاكرة، بينما generator expressions تستهلك ذاكرة أقل لأنها لا تخزن جميع العناصر بل تنشئها واحدة تلو الأخرى أثناء التكرار.

  3. الكفاءة في الاستخدام: عندما تكون هناك حاجة للقيام بعمليات على كل عنصر من القائمة الناتجة، فإن استخدام list comprehension يكون مناسبًا؛ لأنه يوفر وصولًا سريعًا إلى كل العناصر. أما إذا كانت العملية تتطلب معالجة العناصر تدريجيًا ولا تحتاج إلى الوصول إلى كل العناصر في وقت واحد، فإن استخدام generator expression يمكن أن يكون أكثر كفاءة من حيث استخدام الذاكرة والأداء.

  4. الاختيار الأمثل: لا يوجد دائمًا اختيار صحيح بين list comprehensions و generator expressions. يعتمد الاختيار على الحالة الخاصة ومتطلبات البرنامج.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر