في عالم برمجة بايثون، غالبًا ما يظهر مفهومان في المناقشات حول التعليمات البرمجية الفعالة والموجزة: المولدات ووظائف لامدا. باعتباري موردًا للمولدات، فقد رأيت بشكل مباشر التطبيقات العملية للمولدات في مختلف الصناعات. ومع ذلك، فإن فهم الاختلافات بين المولدات ووظائف لامدا أمر بالغ الأهمية لأي مبرمج يتطلع إلى كتابة كود بايثون أكثر فعالية. في منشور المدونة هذا، سنستكشف الاختلافات الرئيسية بين هذين المفهومين، وميزاتهما الفريدة، ومتى نستخدم كل منهما.
ما هو المولد في بايثون؟
المولد في بايثون هو نوع خاص من المكررات. فهو يسمح لك بالتكرار عبر سلسلة من القيم دون الحاجة إلى تخزينها جميعًا في الذاكرة مرة واحدة. وهذا مفيد بشكل خاص عند التعامل مع مجموعات البيانات الكبيرة أو التسلسلات اللانهائية. يتم تعريف المولدات باستخدام وظيفة المولد أو تعبير المولد.
وظائف المولد
يتم تعريف وظيفة المولد مثل وظيفة عادية، ولكن بدلا من استخداميعودالكلمة الأساسية التي يستخدمهاأَثْمَر. عندما يتم استدعاء دالة المولد، فإنها ترجع كائن المولد، والذي يمكن تكراره باستخدام ملفلحلقة أوالتالي()وظيفة.
فيما يلي مثال بسيط لوظيفة المولد التي تولد الوظيفة الأولىنالأرقام الزوجية:
def Even_numbers(n): num = 0 while num < n: result num num += 2 # إنشاء كائن منشئ gen = Even_numbers(10) # كرر على المولد لـ num في gen: print(num)
في هذا المثال،حتى_الأرقامالوظيفة هي وظيفة مولد لأنها تستخدمأَثْمَرالكلمة الرئيسية. عندما يتم استدعاء الدالة، فإنها لا تنفذ التعليمات البرمجية الموجودة داخل الدالة على الفور. بدلاً من ذلك، تقوم بإرجاع كائن منشئ. في كل مرةالتالي()يتم استدعاء الوظيفة على كائن المولد (سواء بشكل صريح أو ضمني في ملفلحلقة)، تستأنف الوظيفة التنفيذ من حيث توقفت حتى تصل إلى النقطة التاليةأَثْمَرإفادة.
تعبيرات المولد
تشبه تعبيرات المولدات فهم القائمة، ولكن بدلاً من استخدام الأقواس المربعة[]، يستخدمون الأقواس(). تعد تعبيرات المولدات طريقة أكثر إيجازًا لإنشاء المولدات.
فيما يلي مثال لتعبير المولد الذي يقوم بإنشاء مربعات الأرقام العشرة الأولى:
gen = (x**2 for x in range(10)) # كرر على المولد لـ num في gen: print(num)
ما هي وظيفة لامدا في بايثون؟
دالة لامدا في بايثون هي دالة صغيرة مجهولة المصدر. يمكن أن يستغرق أي عدد من الوسائط، لكن يمكن أن يحتوي على تعبير واحد فقط. تُستخدم وظائف Lambda غالبًا عندما تحتاج إلى وظيفة بسيطة لفترة قصيرة من الوقت، كما هو الحال فيرسم خريطة(),فلتر()، أومرتبة ()وظائف.
فيما يلي مثال لدالة لامدا التي تضيف رقمين:
add = lambda x, y: x + y # استدعاء دالة lambda result = add(3, 5) print(result)
في هذا المثال، تأخذ الدالة lambda وسيطتينسووويعيد مجموعهم. يتم تعيين وظيفة لامدا للمتغيريضيف، والتي يمكن بعد ذلك استدعاؤها كدالة عادية.
الاختلافات الرئيسية بين المولدات ووظائف لامدا
بناء الجملة والتعريف
- مولدات: يتم تعريف المولدات باستخدام وظيفة المولد (مع ملحق
أَثْمَرالكلمة الأساسية) أو تعبير المولد (باستخدام الأقواس). وهي مصممة لتوليد سلسلة من القيم مع مرور الوقت. - وظائف لامدا: يتم تعريف وظائف Lambda باستخدام
لامداالكلمة الأساسية متبوعة بقائمة من الوسائط ونقطتين وتعبير. لقد تم تصميمها لتكون وظيفة بسيطة من سطر واحد.
الغرض وحالات الاستخدام
- مولدات: يتم استخدام المولدات عندما تحتاج إلى إنشاء تسلسل كبير من القيم ولكنك لا ترغب في تخزينها جميعًا في الذاكرة مرة واحدة. يتم استخدامها بشكل شائع في معالجة البيانات وتدفق البيانات وتكرارها على الملفات الكبيرة. على سبيل المثال، إذا كنت تعمل مع مجموعة بيانات كبيرة وتحتاج إلى معالجتها عنصرًا واحدًا في كل مرة، فقد يكون المولد حلاً رائعًا.
- وظائف لامدا: يتم استخدام وظائف Lambda عندما تحتاج إلى وظيفة بسيطة لمرة واحدة. يتم استخدامها بشكل شائع في وظائف ذات ترتيب أعلى مثل
رسم خريطة(),فلتر()، ومرتبة (). على سبيل المثال، إذا كنت تريد فرز قائمة من القواميس بناءً على مفتاح محدد، فيمكنك استخدام دالة lambda كدالةمفتاححجة فيمرتبة ()وظيفة.
استخدام الذاكرة
- مولدات: المولدات فعالة في الذاكرة لأنها تولد القيم بسرعة. فهي تقوم فقط بتخزين الحالة الحالية للمولد، وليس تسلسل القيم بأكمله. وهذا يجعلها مثالية للعمل مع مجموعات البيانات الكبيرة.
- وظائف لامدا: لا تحتوي وظائف Lambda على أي ميزات خاصة لإدارة الذاكرة. إنها مثل أي وظيفة أخرى من حيث استخدام الذاكرة.
إرجاع القيم
- مولدات: تقوم المولدات بإرجاع كائن المولد، وهو مكرر. يمكنك التكرار على كائن المولد للحصول على القيم واحدة تلو الأخرى.
- وظائف لامدا: تقوم دالات Lambda بإرجاع نتيجة التعبير الذي تحتوي عليه. يتم استدعاؤها مثل الوظائف العادية وترجع قيمة واحدة.
تطبيقات عملية
المولدات في سيناريوهات العالم الحقيقي
كمورد للمولدات، رأيت كيف يمكن استخدام المولدات في مختلف الصناعات. على سبيل المثال، في صناعة توليد الطاقة، تُستخدم المولدات لتوفير الكهرباء في المناطق التي لا تتوفر فيها إمكانية الوصول إلى الشبكة. ملكنامولد النوع الصامتتم تصميمه للعمل بهدوء، مما يجعله مثاليًا للمناطق السكنية أو الأحداث التي يشكل فيها الضجيج مصدر قلق. التشغيل مولد كهربائي صامتيوفر سهولة التشغيل الكهربائي، مما يجعل استخدامه سهلاً حتى بالنسبة لأولئك ذوي المعرفة التقنية المحدودة. ولعشاق الهواء الطلق، لدينامولد ديزل صغير للتخييميوفر مصدرًا موثوقًا للطاقة لرحلات التخييم.
في بايثون، يمكن استخدام المولدات في سيناريوهات مماثلة. على سبيل المثال، إذا كنت تعمل على مسار معالجة البيانات، فيمكنك استخدام المولد لقراءة ملف كبير سطرًا تلو الآخر دون تحميل الملف بأكمله في الذاكرة. هذا يمكن أن يحسن بشكل كبير أداء البرنامج الخاص بك.
وظائف لامدا في سيناريوهات العالم الحقيقي
تُستخدم وظائف Lambda غالبًا في تحليل البيانات وفرزها. على سبيل المثال، إذا كانت لديك قائمة من القواميس التي تمثل الموظفين وتريد فرزها حسب رواتبهم، فيمكنك استخدام دالة lambda كدالةمفتاححجة فيمرتبة ()وظيفة:
الموظفين = [ {'name': 'Alice', 'salary': 5000}, {'name': 'Bob', 'salary': 3000}, {'name': 'Charlie', 'salary': 7000} ] # فرز الموظفين حسب الراتبsorted_employees =sorted(employees, key=lambda x: x['salary']) # اطبع الموظفين الذين تم فرزهم للموظف فيsort_employees: طباعة (موظف)
متى يتم استخدام المولدات ووظائف Lambda
متى تستخدم المولدات
- عندما تحتاج إلى إنشاء تسلسل كبير من القيم ولكنك لا ترغب في تخزينها كلها في الذاكرة مرة واحدة.
- عندما تحتاج إلى التكرار عبر سلسلة من القيم واحدة تلو الأخرى، كما هو الحال في مسار معالجة البيانات.
- عندما تحتاج إلى إنشاء تسلسل لا نهائي من القيم.
متى تستخدم وظائف Lambda
- عندما تحتاج إلى وظيفة بسيطة لمرة واحدة.
- عندما تحتاج إلى تمرير دالة كوسيطة إلى دالة أخرى، كما هو الحال في
رسم خريطة(),فلتر()، أومرتبة (). - عندما تريد كتابة تعليمات برمجية أكثر إيجازًا.
خاتمة
في الختام، المولدات ووظائف لامدا هما ميزتان قويتان في بايثون تخدمان أغراضًا مختلفة. تم تصميم المولدات لتوليد سلسلة من القيم مع مرور الوقت، في حين تم تصميم وظائف لامدا لتكون وظيفة بسيطة من سطر واحد. إن فهم الاختلافات بين هذين المفهومين ومتى تستخدم كل منهما يمكن أن يساعدك على كتابة كود بايثون أكثر كفاءة وإيجازًا.
إذا كنت في السوق لشراء مولد عالي الجودة، سواء كان للاستخدام السكني أو التجاري أو الخارجي، فلدينا مجموعة واسعة من الخيارات لتلبية احتياجاتك. اتصل بنا اليوم لمناقشة متطلباتك والعثور على المولد المثالي المناسب لك.


مراجع
- وثائق بايثون: https://docs.python.org/3/
- بايثون الحقيقية: https://realpython.com/

