دوال Lambda في Python: الصياغة والأمثلة العملية
تُعد دوال Lambda في Python من الأدوات المفيدة لكتابة دوال صغيرة وسريعة دون الحاجة إلى تعريف اسم خاص بها. ورغم أن بعض المبتدئين يظنون أنها ميزة متقدمة، فإن فهمها واستخدامها في الحالات المناسبة يمكن أن يجعل الشيفرة أكثر اختصاراً ووضوحاً.
في هذا المقال ستتعرف إلى معنى دوال Lambda، وطريقة كتابتها، وأهم الأمثلة العملية التي توضح متى يكون استخدامها مناسباً داخل مشاريع Python.

ما هي دالة Lambda في Python؟
دالة Lambda هي دالة مجهولة anonymous function، أي أنها تُكتب دون اسم. وتمتاز بأنها تحتوي على تعبير واحد فقط، لذلك تُستخدم غالباً عندما تحتاج إلى تنفيذ عملية بسيطة وسريعة داخل موضع محدد في الشيفرة.
في Python تُكتب الدوال التقليدية عادة باستخدام الكلمة المفتاحية def، كما في المثال التالي:
def my_func(a):
# function body
pass
في هذا النوع من الدوال يمكنك كتابة عدة أسطر، وإضافة تعليمات وشروط ومعالجات متعددة. لكن في بعض الحالات قد تحتاج إلى دالة صغيرة جداً لا تتجاوز عملية واحدة، مثل مضاعفة قيمة رقم ما.
def double(x):
return x * 2
هذه الدالة صالحة تماماً، ويمكن استخدامها مثلاً مع الدالة map:
def double(x):
return x * 2
my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(double, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]
لكن إذا كانت هذه الدالة ستُستخدم مرة واحدة فقط، فقد يكون من الأنسب استخدام Lambda لتقليل عدد الأسطر وتجنب إنشاء دالة مسماة لا حاجة فعلية للاحتفاظ بها.
متى تستخدم دوال Lambda؟
يُفضّل استخدام دوال Lambda عندما تحتاج إلى دالة قصيرة ومؤقتة، خصوصاً عند تمريرها كوسيط إلى دوال أعلى رتبة higher-order functions مثل:
- map
- filter
- sorted في بعض الحالات
الميزة الأساسية هنا أن الدالة تُكتب في نفس المكان الذي تحتاجها فيه، مما يجعل الشيفرة أكثر مباشرة، ويقلل من تشتيت القارئ بين تعريف الدالة واستخدامها.
صياغة Lambda في Python
الصياغة العامة لدالة Lambda هي:
lambda args: expression
وتتكون من العناصر التالية:
- الكلمة المفتاحية lambda
- قائمة المعاملات arguments مفصولة بفواصل عند الحاجة
- النقطتان الرأسيتان :
- تعبير واحد فقط يمثل جسم الدالة
من المهم الانتباه إلى أن دالة Lambda:
- لا تحمل اسماً بشكل مباشر
- يمكن أن تستقبل عدداً واحداً أو أكثر من المعاملات
- يجب أن تحتوي على تعبير واحد فقط، وليس مجموعة تعليمات متعددة
أمثلة عملية على استخدام Lambda
1) استخدام Lambda مع map
إذا أردت مضاعفة كل عنصر داخل قائمة، يمكنك كتابة دالة Lambda مباشرة داخل map:
my_list = [1, 2, 3, 4, 5, 6]
new_list = list(map(lambda x: x * 2, my_list))
print(new_list) # [2, 4, 6, 8, 10, 12]
في هذا المثال تقوم Lambda باستقبال كل عنصر على حدة من القائمة، ثم تعيد قيمته مضروبة في 2.
مقارنةً بالدالة التقليدية double، فإن هذا الأسلوب أكثر اختصاراً، خاصة عندما لا تكون هناك حاجة لإعادة استخدام الدالة في موضع آخر.
2) استخدام Lambda مع filter
يمكن أيضاً استخدام Lambda مع filter لاستخراج العناصر التي تحقق شرطاً معيناً. على سبيل المثال، إذا أردت إنشاء قائمة تحتوي فقط على الأرقام الموجبة:
my_list = [18, -3, 5, 0, -1, 12]
new_list = list(filter(lambda x: x > 0, my_list))
print(new_list) # [18, 5, 12]
هنا تقوم الدالة Lambda بالتحقق من الشرط x > 0، وتمرر filter فقط العناصر التي تُرجع معها القيمة True.
هذا النمط مفيد جداً عندما يكون الشرط بسيطاً، ولا يستدعي إنشاء دالة منفصلة.
3) إعادة دالة Lambda من داخل دالة أخرى
من الاستخدامات القوية أيضاً إمكانية إرجاع دالة Lambda من دالة أخرى. هذا الأسلوب مفيد عندما تريد إنشاء دوال متشابهة تعتمد على قيمة معينة يتم تمريرها مسبقاً.
مثلاً، إذا كنت تريد إنشاء دوال تقوم بمضاعفة الأرقام أو تثليثها أو ضربها في 10، يمكنك تنفيذ ذلك بهذه الطريقة:
def multiplyBy(n):
return lambda x: x * n
double = multiplyBy(2)
triple = multiplyBy(3)
times10 = multiplyBy(10)
في هذا المثال، تحتفظ دالة Lambda بالقيمة n القادمة من الدالة الخارجية. لذلك تصبح لدينا دوال جديدة جاهزة للاستعمال:
print(double(6)) # 12
print(triple(5)) # 15
print(times10(12)) # 120
هذا الأسلوب مفيد لأنه يسمح لك بإنشاء دوال مخصصة بطريقة مرنة ومختصرة.
4) مقارنة مع الدالة الداخلية التقليدية
يمكن تنفيذ الفكرة السابقة دون Lambda باستخدام دالة داخلية عادية، كما يلي:
def multiplyBy(x):
def temp(n):
return x * n
return temp
لكن استخدام Lambda هنا يجعل الشيفرة أقصر وأسهل قراءة، خصوصاً عندما تكون الوظيفة المطلوبة بسيطة وواضحة.
مزايا استخدام Lambda في Python
- تقليل عدد الأسطر البرمجية في الحالات البسيطة
- كتابة الدالة في نفس مكان استخدامها
- تحسين وضوح الشيفرة عند التعامل مع العمليات القصيرة
- العمل بكفاءة مع دوال مثل map وfilter
- تجنب إنشاء دوال مسماة لا تُستخدم إلا مرة واحدة
متى لا يكون استخدام Lambda مناسباً؟
رغم فائدة Lambda، فإن استخدامها ليس الخيار الأفضل دائماً. من الأفضل تجنبها في الحالات التالية:
- إذا كانت الدالة تحتاج إلى أكثر من تعبير واحد
- إذا كانت منطقية ومعقدة وتحتاج إلى شرح أو توثيق أو اسم واضح
- إذا كان وجود دالة مسماة سيجعل الشيفرة أكثر قابلية للفهم والصيانة
بمعنى آخر، استخدم Lambda للاختصار الذكي، لا للاختصار المربك.
أفضل الممارسات عند استخدام Lambda
- اجعلها قصيرة وواضحة قدر الإمكان.
- استخدمها مع العمليات البسيطة فقط.
- إن أصبحت القراءة صعبة، استبدلها بدالة معرفة باستخدام def.
- لا تُفرط في استخدامها داخل شيفرات معقدة أو متداخلة.
الخلاصة التقنية
دوال Lambda في Python وسيلة عملية لكتابة دوال صغيرة ومباشرة، خاصة عند التعامل مع map وfilter أو عند إنشاء دوال مخصصة بسرعة. من الناحية التقنية، قوتها الحقيقية تكمن في الاختصار والمرونة، لكن فعاليتها تعتمد على حسن الاستخدام. إذا كانت العملية بسيطة وتُستخدم مرة واحدة، فإن Lambda خيار ممتاز. أما إذا زاد التعقيد، فالدوال التقليدية باستخدام def تبقى أكثر وضوحاً وقابلية للصيانة.