تكرار السؤال: …
الإجابة المختصرة
استخدم lambda لتعبير صغير يُمرر مباشرة كمعامل (مثل key في sorted)، واستخدم def لأي منطق يحتاج اسمًا أو أكثر من تعبير أو توثيقًا أو اختبارًا.
الشرح
الـ lambda محدودة بتعبير واحد ولا تدعم الجمل مثل try أو الإسناد العادي. إسناد lambda لمتغير (f = lambda x: ...) تمنعه أدلة الأسلوب (PEP 8) لأن def أوضح وتعطي اسمًا مفيدًا في الـ tracebacks. وغالبًا تكون operator.itemgetter و attrgetter بديلًا أوضح وأسرع لاستخراج الحقول.
مثال بالكود
from operator import attrgetter
users.sort(key=lambda u: (u.last_name, u.first_name))
users.sort(key=attrgetter("created_at"))
# بدل: is_adult = lambda u: u.age >= 18
def is_adult(user) -> bool:
return user.age >= 18أخطاء شائعة
- إسناد lambda إلى اسم بدل تعريف دالة بـ def.
- كتابة lambdas متداخلة ومعقدة يصعب قراءتها وتتبع أخطائها.