دروس الوحدة (4/4)
لامدا والوظائف ذات الترتيب الأعلى
lambda هي دالة مجهولة، محددة في سطر واحد. بناء الجملة:
lambda parametri: espressioneيعادل def، ولكنه أكثر إيجازًا ومناسبًا "للرمي"
وظائف لتمريرها إلى وظائف أخرى.
quadrato = lambda x: x ** 2
quadrato(5) # 25
# equivalent to:
def quadrato(x):
return x ** 2الاختلافات مقابل def
| الجانب | محمي_INLINE_5 | محمي_INLINE_6 |
|---|---|---|
| الاسم | مطلوب | مجهول |
| الجسم | أقوال متعددة | تعبير واحد |
| عودة | صريح | ضمنيًا (التعبير) |
| سلسلة وثائقية | نعم | لا |
لا يوجد return داخل لامدا: قيمة التعبير هي النتيجة.
متى تستخدم لامدا
** دائمًا تقريبًا **: كوسيطة key لوظائف الفرز أو التحديد.
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']key=len يخبر sorted: "للمقارنة بين عنصرين، استخدم طولهما". ل
معايير مخصصة، استخدم لامدا:
utenti = [
{"nome": "Ada", "eta": 36},
{"nome": "Linus", "eta": 54},
{"nome": "Grace", "eta": 85},
]
per_eta = sorted(utenti, key=lambda u: u["eta"])
# sorted by ascending ageالاستخدامات النموذجية الأخرى: min(...)، max(...)، filter(...)، map(...).
nums = [-3, 1, -4, 1, -5, 9]
max(nums, key=lambda n: abs(n)) # -5 (maximum by absolute value)وظائف ذات ترتيب أعلى
تعتبر الدالة ** ذات ترتيب أعلى ** إذا قبلت دالة كوسيطة أو
يعود واحد. sorted، max، filter، map ذات ترتيب أعلى. لامدا
موجود على وجه التحديد لتسهيل إجراء المكالمات ذات الترتيب الأعلى.
متى يجب تجنب وظائف لامدا
تعد وظائف Lambda مفيدة للعمليات القصيرة والبسيطة (مثل الفرز السريع). ومع ذلك، إذا وجدت نفسك تقوم بتعيين lambda لمتغير (على سبيل المثال double = lambda x: x * 2)، فمن المفضل عمومًا استخدام كتلة def القياسية لأغراض سهولة القراءة وتصحيح الأخطاء (نظرًا لأن الوظائف المحددة بـ def تحتفظ بأسمائها الحقيقية في عمليات تتبع الأخطاء).
جربه
في ضوء القائمة `الكلمات = ['banana'، 'kiwi'، 'mela'، 'fragola']`، قم بفرزها حسب الطول تصاعديًا إلى `حسب_الطول`. تقييم `حسب_الطول`.
إظهار التلميح
مفتاح = لين (أو لامدا ص: لين (ع)).
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
بالنظر إلى قائمة المجموعات `النقاط = [(1، 5)، (3، 2)، (2، 4)]`، قم بفرزها حسب العنصر الثاني بترتيب تصاعدي وقم بتعيينها إلى `by_y`. تقييم `by_y`.
إظهار التلميح
لامدا ص: ص[1]
الحل متاح بعد 3 من المحاولات
التحدي الإضافي
Define an anonymous `lambda` function that takes a number `x` and returns `True` if the number is even, and `False` otherwise. Assign the lambda to the variable `is_even` and test it with `is_even(8)` as the last line.
إظهار التلميح
اكتب is_even = lambda x: x % 2 == 0 ثم اتصل بـ is_even(8).
الحل متاح بعد 3 من المحاولات