🚀 ما هي دوال Lambda؟ اكتشف سر كتابة دوال في سطر واحد!
مرحباً بك في عالم الدوال الرشيقة في بايثون! 🐍 تخيل أنك تريد كتابة دالة صغيرة جداً، مهمتها بسيطة وواضحة، لكن كتابتها بالطريقة التقليدية باستخدام def تبدو طويلة أكثر من اللازم. هنا يأتي دور الدوال اللامية (Lambda Functions)، والتي تُعرف أيضاً باسم الدوال المجهولة (Anonymous Functions).
ببساطة، دالة Lambda هي دالة صغيرة يمكن كتابتها في سطر واحد من الكود. إنها رائعة للمهام البسيطة التي لا تحتاج إلى اسم أو تعقيد.
📝 الفرق بين def و lambda
لنفهم الفرق بشكل عملي. لنكتب دالة تقوم بضرب عدد في نفسه (تربيع العدد) باستخدام الطريقتين.
الطريقة التقليدية باستخدام def:
# تعريف الدالة بالطريقة المعتادة
def square_def(x):
return x * x
# استدعاء الدالة
result = square_def(5)
print(result) # الناتج: 25
الطريقة باستخدام lambda:
# تعريف الدالة باستخدام lambda
square_lambda = lambda x: x * x
# استدعاء الدالة
result = square_lambda(5)
print(result) # الناتج: 25
🔍 لاحظ الفرق: دالة lambda كُتبت في سطر واحد! بناء الجملة بسيط:
lambda arguments: expression
lambda: الكلمة المفتاحية لإنشاء الدالة.arguments: المُدخلات أو المعاملات (مثلx).expression: التعبير الذي يتم حسابه وإرجاع نتيجته تلقائياً. لا حاجة لكلمةreturn.
🛠️ بناء جملة Lambda خطوة بخطوة
لنكسر الصيغة العامة ونفهمها بمزيد من الأمثلة البسيطة.
مثال 1: دالة بمعامل واحد
# دالة تضيف الرقم 10 إلى أي عدد تدخله
add_ten = lambda num: num + 10
print(add_ten(15)) # الناتج: 25
مثال 2: دالة بمعاملين
# دالة تجمع عددين
sum_two = lambda a, b: a + b
print(sum_two(10, 20)) # الناتج: 30
مثال 3: دالة بثلاثة معاملات
# دالة تحسب المتوسط لثلاثة أعداد
average = lambda x, y, z: (x + y + z) / 3
print(average(10, 20, 30)) # الناتج: 20.0
💡 ملاحظة مهمة: دوال lambda مُصممة لتكون بسيطة وقصيرة. إذا كانت منطق الدالة معقداً ويحتاج لعدة أسطر، فمن الأفضل استخدام def لكتابة دالة عادية.
⚡ لماذا نستخدم Lambda؟ التطبيقات العملية
القوة الحقيقية لـ lambda تظهر عندما نستخدمها مع دوال أخرى، خاصة تلك التي تأخذ دالة كمعامل. هذا يجعل الكود أكثر أناقة وقراءة.
1. استخدام Lambda مع map()
تقوم map() بتطبيق دالة على جميع عناصر قائمة (أو أي كائن قابل للتكرار).
numbers = [1, 2, 3, 4, 5]
# مضاعفة كل عنصر في القائمة باستخدام lambda مع map
doubled = list(map(lambda n: n * 2, numbers))
print(doubled) # الناتج: [2, 4, 6, 8, 10]
2. استخدام Lambda مع filter()
تقوم filter() بترشيح عناصر القائمة بناءً على شرط معين.
numbers = [11, 24, 5, 30, 7, 18]
# تصفية الأعداد الزوجية فقط من القائمة
even_numbers = list(filter(lambda n: n % 2 == 0, numbers))
print(even_numbers) # الناتج: [24, 30, 18]
3. استخدام Lambda مع sort()
تتيح لنا lambda تحديد معيار لترتيب القوائم المعقدة، مثل قوائم المجموعات (Tuples) أو القواميس.
# قائمة من المجموعات، كل مجموعة تمثل (الاسم, العمر)
students = [("سارة", 22), ("أحمد", 19), ("مريم", 25)]
# ترتيب القائمة بناءً على العمر (العنصر الثاني في كل مجموعة)
students.sort(key=lambda student: student[1])
print(students) # الناتج: [('أحمد', 19), ('سارة', 22), ('مريم', 25)]
⚠️ محاذير وقيود استخدام Lambda
على الرغم من قوتها، إلا أن لدوال lambda حدوداً يجب أن تعرفها:
- محدودة بتعبير واحد: يمكنها احتواء تعبير واحد فقط في جسمها. لا يمكنك كتابة حلقات تكرار
forأو شروطif-elif-elseمعقدة داخلها. - ليست دائمة: لأنها مجهولة الاسم، يصعب تتبعها أو تصحيح الأخطاء (Debug) فيها مقارنة بالدوال المسماة بـ
def. - قد تُقلل القراءة: إذا أسرفت في استخدامها أو جعلتها معقدة، يصبح الكود صعب الفهم. الاعتدال مطلوب.
🎯 ختاماً: متى نستخدم Lambda؟
استخدم دوال lambda عندما:
- تكون الدالة صغيرة جداً ويمكن التعبير عنها في تعبير واحد.
- تكون الدالة مؤقتة ولن تحتاج لاستدعائها من أماكن عديدة في برنامجك.
- تريد تمرير دالة بسيطة كمعامل لدالة أخرى مثل
map()أوfilter()أوsort().
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال