ما هي دوال Lambda في بايثون
دوال Lambda هي طريقة مدمجة ومختصرة لتعريف الدوال مباشرة داخل التعبيرات البرمجية. في لغة البرمجة بايثون، تُعرف أيضًا باسم الدوال المجهولة (Anonymous Functions). سُميت بهذا الاسم لأنها تُنشأ بدون اسم، وتُستخدم غالبًا محليًا في مكان الكود حيث لا داعي لإنشاء دالة كاملة باستخدام الكلمة المفتاحية def.
تتميز دوال Lambda بالبساطة وسهولة الاستخدام. غالبًا ما تُستخدم مع الدوال عالية المستوى مثل map() و filter() و sorted(). كما تُستخدم دوال Lambda على نطاق واسع في المكتبات الشهيرة مثل pandas و NumPy و Flask و Tkinter والعديد من أدوات نظام بايثون البيئي.
أساسيات صيغة دوال Lambda
هيكل تعبير Lambda
صيغة دالة Lambda في بايثون تكون كالتالي:
lambda arguments: expression
حيث:
- arguments — قائمة وسائط الدالة، تمامًا مثل الدالة العادية
- expression — تعبير واحد، ناتج حسابه سيُعاد كنتيجة للدالة
خصائص عمل دوال Lambda
لدوال Lambda في بايثون عدة خصائص مهمة:
- تعيد دائمًا ناتج التعبير تلقائيًا
- لا تحتوي على الكلمة المفتاحية return
- ناتج حساب التعبير هو القيمة المُعادة
- تدعم تعبيرًا واحدًا فقط في جسم الدالة
أمثلة عملية لتعبيرات Lambda
عمليات حسابية بسيطة
# حساب مربع العدد
square = lambda x: x ** 2
print(square(5)) # 25
# جمع عددين
add = lambda a, b: a + b
print(add(3, 7)) # 10
# التحقق من زوجية العدد
is_even = lambda x: x % 2 == 0
print(is_even(4)) # True
Lambda مع تعبيرات شرطية
# تحديد القيمة القصوى
max_value = lambda x, y: x if x > y else y
print(max_value(10, 15)) # 15
# تصنيف الأعداد
categorize = lambda x: "موجب" if x > 0 else "سالب" if x < 0 else "صفر"
مقارنة بين Lambda والدوال العادية
الاختلافات الرئيسية
| الخاصية | الدالة العادية (def) | دالة Lambda |
|---|---|---|
| الصيغة | def func(x): return x * 2 | lambda x: x * 2 |
| عدد التعبيرات | متعددة | تعبير واحد فقط |
| التسمية | لها اسم | عادة مجهولة |
| مجال الاستخدام | إعادة الاستخدام | عمليات لمرة واحدة |
| التوثيق | تدعم docstring | لا تدعم |
| تعليقات الأنواع | تدعم | دعم محدود |
متى تختار Lambda
تكون دوال Lambda أكثر فعالية في الحالات التالية:
- العمليات البسيطة المكونة من سطر واحد
- الاستخدام كوسائط لدوال أخرى
- الحسابات المؤقتة دون الحاجة لاستدعاء متكرر
- العمل مع الدوال عالية المستوى
استخدام Lambda مع الدوال عالية المستوى
دالة map()
تطبق دالة map() دالة معينة على كل عنصر من عناصر الكائن القابل للتكرار:
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares) # [1, 4, 9, 16, 25]
# تحويل النصوص إلى أحرف كبيرة
words = ["hello", "world", "python"]
uppercase = list(map(lambda s: s.upper(), words))
print(uppercase) # ['HELLO', 'WORLD', 'PYTHON']
دالة filter()
تنشئ filter() مكررًا من العناصر التي تحقق الشرط المحدد:
# تصفية الأعداد الزوجية
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8]
# تصفية النصوص الأطول من 3 أحرف
words = ["hi", "hello", "ok", "python", "code"]
long_words = list(filter(lambda w: len(w) > 3, words))
print(long_words) # ['hello', 'python', 'code']
تطبيقات متقدمة لـ Lambda
استخدام Lambda مع pandas
في مكتبة pandas، تُستخدم دوال Lambda بشكل شائع لمعالجة البيانات:
import pandas as pd
# إنشاء إطار بيانات
df = pd.DataFrame({
'name': ['Ahmed', 'Sara', 'Khaled'],
'age': [25, 30, 35],
'salary': [5000, 6000, 7000]
})
# تطبيق زيادة على الراتب
df['salary_after_raise'] = df['salary'].apply(lambda x: x * 1.1)
print(df)
إنشاء closures باستخدام Lambda
يمكن استخدام دوال Lambda لإنشاء closures (دوال مغلقة) بسيطة:
# دالة مضاعف
def multiplier(n):
return lambda x: x * n
double = multiplier(2)
triple = multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15
أفضل الممارسات والنصائح
متى تستخدم ومتى تتجنب Lambda
استخدم دوال Lambda عندما:
- تكون العملية بسيطة وتُكتب في سطر واحد
- تحتاج دالة مؤقتة لاستخدامها مرة واحدة
- تعمل مع دوال مثل map() و filter() و sorted()
تجنب دوال Lambda عندما:
- يكون المنطق معقدًا ويتطلب عدة أسطر
- تحتاج إلى إعادة استخدام الدالة في عدة أماكن
- يحتاج الكود إلى توثيق واضح (docstring)
الخلاصة
دوال Lambda في بايثون هي أداة قوية ومفيدة لكتابة كود مختصر وفعال. تتيح لك تعريف دوال صغيرة ومجهولة في سطر واحد، مما يجعل الكود أكثر وضوحًا وسهولة في القراءة عند استخدامها بشكل صحيح. تذكر أن المفتاح هو التوازن: استخدم Lambda للعمليات البسيطة، و def للدوال المعقدة أو القابلة لإعادة الاستخدام.