الانتقال إلى المحتوى الرئيسي
الوحدة 5 · الدرس 4 من 420/36 في الدورة~10 min
دروس الوحدة (4/4)

لامدا والوظائف ذات الترتيب الأعلى

lambda هي دالة مجهولة، محددة في سطر واحد. بناء الجملة:

Python
lambda parametri: espressione

يعادل def، ولكنه أكثر إيجازًا ومناسبًا "للرمي" وظائف لتمريرها إلى وظائف أخرى.

Python
quadrato = lambda x: x ** 2
quadrato(5)    # 25

# equivalent to:
def quadrato(x):
    return x ** 2

الاختلافات مقابل def

الجانبمحمي_INLINE_5محمي_INLINE_6
الاسممطلوبمجهول
الجسمأقوال متعددةتعبير واحد
عودةصريحضمنيًا (التعبير)
سلسلة وثائقيةنعملا

لا يوجد return داخل لامدا: قيمة التعبير هي النتيجة.

متى تستخدم لامدا

** دائمًا تقريبًا **: كوسيطة key لوظائف الفرز أو التحديد.

Python
parole = ["banana", "kiwi", "mela", "fragola"]
sorted(parole, key=len)
# ['kiwi', 'mela', 'banana', 'fragola']

key=len يخبر sorted: "للمقارنة بين عنصرين، استخدم طولهما". ل معايير مخصصة، استخدم لامدا:

Python
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(...).

Python
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 تحتفظ بأسمائها الحقيقية في عمليات تتبع الأخطاء).

جربه

تمرين#python.m5.l4.e1
المحاولات: 0جارٍ التحميل…

في ضوء القائمة `الكلمات = ['banana'، 'kiwi'، 'mela'، 'fragola']`، قم بفرزها حسب الطول تصاعديًا إلى `حسب_الطول`. تقييم `حسب_الطول`.

جارٍ تحميل المحرر…
إظهار التلميح

مفتاح = لين (أو لامدا ص: لين (ع)).

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m5.l4.e2
المحاولات: 0جارٍ التحميل…

بالنظر إلى قائمة المجموعات `النقاط = [(1، 5)، (3، 2)، (2، 4)]`، قم بفرزها حسب العنصر الثاني بترتيب تصاعدي وقم بتعيينها إلى `by_y`. تقييم `by_y`.

جارٍ تحميل المحرر…
إظهار التلميح

لامدا ص: ص[1]

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m5.l4.e3
المحاولات: 0جارٍ التحميل…

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 من المحاولات