وظائف بايثون لامدا مع أمثلة عملية

نشرت: 2021-06-21

وظائف Python lambda هي تلك الوظائف الصغيرة ويتم تعريفها بدون اسم. في لغة python ، تُستخدم الكلمة الأساسية "def" لتعريف دالة. ومع ذلك ، في حالة الوظائف المجهولة ، يتم استخدام الكلمة الأساسية "lambda" لتحديد تلك الوظائف. لذلك ، فإن الاسم "وظائف لامدا. قد يكون هناك اسم أو لم يتم تعيينه للوظائف.

بالمقارنة مع الوظائف العادية في لغة بيثون ، فإن وظائف لامدا تكون قصيرة.

تمت إضافة وظائف lambda إلى بناء جملة لغات البرمجة مثل Python و Java و C ++ و C # وما إلى ذلك في تركيبها. بينما يتم استخدامه كمفهوم أساسي في لغات ML أو LISP.

ستركز المقالة على مفهوم وظائف Python lambda واستخدامها.

استنادًا إلى نوع لغة البرمجة ، يمكن استخدام وظائف lambda بالتبادل مع المصطلحات التالية:

  • وظائف مجهولة
  • وظائف لامدا
  • تعابير لامدا
  • تجريدات لامدا
  • شكل لامدا
  • حرفية الوظيفة

جدول المحتويات

لامدا حساب التفاضل والتكامل

حساب لامدا هو نموذج حسابي مبني على أساسه تعبيرات لامدا. يعتمد حساب Lambda على التجريد الخالص وتم إضفاء الطابع الرسمي عليه بواسطة Alonzo Church. يُعرف أيضًا باسم تجريدات لامدا ، وهو يشير إلى النموذج الأصلي الذي أنشأته كنيسة ألونزو.

يمكن ترميز أي حساب بواسطة هذا المفهوم.

تركيب دالة لامدا:

يتم استخدام الصيغة التالية أثناء استخدام وظائف lambda في لغة python.

حجج لامدا: التعبير

يمكن أن يكون هناك أي عدد من الوسيطات في دالة lambda في لغة بيثون . لكن يمكن أن يكون للوظائف تعبير واحد فقط. يتم تقييم هذا التعبير أولاً ثم يتم إرجاعه. يكمن استخدام دوال lambda في أي مكان توجد فيه متطلبات كائنات الوظيفة.

النظر في حالة يتم فيها تعريف دالة مجهولة ذات وسيطين باستخدام لامدا ولكنها غير مرتبطة بأي متغير:

لامدا س ، ص: س + ص

هنا ، يتم أخذ الوسيطتين بواسطة الدالة ويتم إرجاع المجموع.

هناك بعض الخصائص التي تظهرها دالة لامدا:

  • لا يمكن أن يكون هناك أي عبارات في جسم دالة lambda ولكن يمكن أن تحتوي فقط على التعبيرات.
  • رمز التنفيذ هو مجرد سطر واحد.
  • لا تدعم وظيفة lambda في لغة بيثون التعليقات التوضيحية للنوع .
  • يسمح بالاحتجاج الفوري.

لا يمكن استخدام العبارات

كما ذكرنا ، لا يمكن أن يكون هناك أي عبارات أثناء تحديد وظائف لامدا. إذا كان المستخدم يستخدم عبارات مثل تمرير ، أو إرجاع ، أو زيادة ، أو تأكيد ، فسيكون هناك استثناء SyntaxError. يمكن عرض نتيجة الاستثناء من خلال الكود أدناه

مصدر

في الكود أعلاه ، نتج خطأ في بناء الجملة عندما تم تحليل الكود الذي يحتوي على جملة التأكيد في جسم الوظيفة lambda.

تحتوي وظيفة lambda على تعبير واحد فقط

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

مصدر

يتم إرجاع السلسلة "odd" عندما يكون هناك وسيطة "فردية" بينما يتم إرجاع السلسلة "even" عندما يكون هناك وسيطة "زوجية". يتم استخدام سطرين في الكود أعلاه لأنهما داخل الأقواس. لكنها تظل كتعبير واحد.

اكتب التعليقات التوضيحية

مع توفر "نوع تلميح" في لغة بيثون ، يتم الآن تفضيل الوظائف العادية على وظائف لامدا في بايثون. مع توفر أدوات مثل mypy و pyre وما إلى ذلك ، يمكن اكتشاف خطأ النوع باستخدام full_name (). يظهر خطأ بناء الجملة المرتبط بوظيفة lambda أثناء وقت التشغيل.

تنفيذ الوظيفة التي تم استدعاؤها فورًا (IIFE)

لا يمكن استخدام الميزة خارج مترجم بيثون. يمكن تمرير تعريف تعبير lambda في لغة python إلى وظائف ذات ترتيب أعلى مثل map () ، إلخ.

الحجج في دالة لامدا

يتم دعم طرق مختلفة في تعبيرات بيثون لامدا لتمرير الحجج مثل:

  • الحجج الموضعية
  • تُعرف الوسائط المسماة أيضًا باسم وسيطات الكلمات الأساسية
  • قائمة متغيرة من الحجج التي يشار إليها أيضًا باسم varargs.
  • قائمة متغيرة من وسيطات الكلمات الرئيسية
  • الحجج مع الكلمات الرئيسية فقط.

مصممون بتعبير بايثون لامدا

يمكن تعريف المصمم على أنه تطبيق نمط يسمح بإضافة سلوك إلى فصل دراسي أو وظيفة. يتم استخدام بناء جملة decorator كبادئة لوظيفة للتعبير عن مصمم في لغة python

فقط باستخدام الوسيطة "Python" ، تتم طباعة الوظيفة المزخرفة () . السلوك الإضافي الذي تتم طباعته هو "وظيفة الاتصال" المزخرفة_وظيفة ".

تسمح Python بإضافة مصمم إلى وظيفة lambda ، على الرغم من أن استخدام بناء الجملة decorator غير مطلوب. يعمل المصمم كوظيفة تستدعي وظيفة لامدا.

يظهر <lambda> حيث يتم تحديد وظيفة lambda. بينما ، في حالة الوظيفة العادية مثل add_two ، يتم تحديدها بوضوح.

لأغراض التصحيح ، يمكن تزيين وظائف lambda بهذه الطريقة.

إنهاء

يُعرَّف Closure () في بيثون على أنه دالة حيث ترتبط المتغيرات الحرة باستثناء المعلمات المستخدمة في الوظيفة بقيم محددة يتم تحديدها داخل نطاق الوظيفة. يمكننا استدعاء الإغلاق من أي مكان. يمكن أن تعمل وظائف Lambda في Python كإغلاق بطريقة تعمل الوظائف العادية كإغلاق.

استخدام وظائف لامدا

  • عندما نحتاج إلى استخدام دالة لفترة زمنية أقصر ، يتم استخدام وظائف lambda في هذه الحالة.
  • لتمرير الوظائف إلى وظيفة ذات رتبة أعلى ، يتم تطبيق وظائف لامدا. يتم تمرير الوظائف كوسيطات لتلك الوظائف ذات الترتيب الأعلى.
  • يمكن استخدام وظائف lambda في لغة python مع وظائف مضمنة أخرى مثل map () ، إلخ.

اختبار وظائف لامدا

من خلال استخدام عقيدة الوحدات النمطية والوحدة النمطية ، يمكن اختبار وظائف لامدا في الثعبان:

  • وحدات Unittest تختبر وظائف لامدا مثل الوظائف العادية.
  • في حالة Docest module ، يتم استخراج كود python من docstring ، لتنفيذ الاختبار. لا تسمح صيغة دالة lambda باستخدام سلسلة docstring . ولكن ، يمكن تعيين سلسلة للعنصر _doc_ في lambda الذي يتم تسميته.

أمثلة على وظائف بايثون لامدا

في الكود أدناه ، يتم تعريف دالة باسم "الهوية" حيث يتم إرجاع الوسيطة. يتم تعريفها على أنها وظيفة قياسية للبيثون من خلال استخدام الكلمة الأساسية "def".

>>> هوية التعريف (x) ؛

… .. عودة س

هنا ، يتم أخذ x كوسيطة بواسطة "الهوية" الخاصة بالوظيفة وعند استدعائها تقوم بإرجاع الوسيطة.

كتابة نفس الكود باستخدام لامدا ستكون:

لامدا x: x

يتكون التعبير من ثلاثة أجزاء: Lambda ككلمة أساسية ، و x الذي يعد متغيرًا منضمًا ، و X هو جسم الكود.

  • يشير المتغير المنضم إلى الوسيطة التي يتم تمريرها إلى دالة lambda. ومع ذلك ، فإن المتغيرات الحرة هي تلك غير المقيدة ويمكن الرجوع إليها في نص التعبير. يمكن أن يكون الثابت متغيرًا مجانيًا أو متغيرات محددة في نطاق الوظيفة.

يمكن صياغة التعبير أعلاه كـ

>>> لامدا س: س + 1

هنا ، تقوم الوظيفة بإضافة 1 إلى الوسيطة. يمكن إضافة الوظيفة إلى وسيطة أثناء إحاطة كل من الوظيفة مع الوسيطة من خلال استخدام الأقواس.

>>> (لامدا x: x + 1) (2)

3

لحساب القيمة في تعبير ما ، يتم تطبيق استراتيجية تخفيض. مثل ، في المثال أعلاه ، يمكن استبدال المتغير المرتبط "x" بالوسيطة 2.

(لامدا س: س + 1) (2) = لامدا 2: 2 + 1

= 2 + 1

= 3

تعتبر وظيفة lambda تعبيرًا ، ويمكن إجراء التسمية ويمكن إعادة كتابة الكود أعلاه

>>> add_one = Lambda x: x + 1

>>> add_one (2)

3

هذا يعادل الكتابة:

def add_one (x):

العودة x + 1

يتم أخذ وسيطة واحدة بواسطة وظائف lambda. أيضًا ، أثناء تحديد دالة lambda في لغة python ، لا يوجد أقواس حول الوظائف.

لتمرير أكثر من وسيطة إلى دالة python lambda ، يتم سرد الوسيطات وفصلها باستخدام فاصلة (،). يجب ألا يكون هناك أقواس أثناء سرد الوسائط. يتم عرض مثال على وظائف الوسائط المتعددة أدناه:

هنا ، يتم أخذ وسيطتين بواسطة دالة lambda تحت full_name. يتم إرجاع سلسلة بواسطة الوظيفة التي تقحم المعلمات الأولى والأخيرة . يوضح الكود أنه أثناء تحديد وظائف لامدا ، لم يكن هناك استخدام لأي قوس. استدعاء دالة lambda يتبع نفس طريقة الدالة القياسية في لغة python ، أي باستخدام الأقواس التي تحيط بالمتغيرات.

وظائف Python Lambda مع مرشح ()

في python ، يقبل عامل التصفية () الوسيطة كقائمة ودالة. من خلال عناصر القائمة ، يمكن استدعاء الوظيفة التي تقوم بإرجاع قائمة جديدة من العناصر. يتم تقييم وظيفة هذه القائمة المنشأة حديثًا إلى True .

يتم عرض مثال لوظيفة filter () أدناه والتي تُستخدم لتصفية الأرقام الزوجية الموجودة في القائمة.

مصدر

الناتج الناتج عن البرنامج هو القائمة الجديدة: [4 ، 6 ، 8 ، 12].

دالة بايثون لامدا مع الخريطة ()

يتم أخذ قائمة ودالة كوسيطة في دالة خريطة بيثون (). تستدعي جميع العناصر الموجودة في القائمة الوظيفة التي تُرجع قائمة تم إنشاؤها حديثًا بالعناصر التي يتم إرجاعها بواسطة الوظيفة.

خاتمة

وظائف Python lambda هي تلك الوظائف التي تكون مفردة السطر ويتم الإعلان عنها بدون اسم ، أي وظيفة مجهولة. يمكن تمرير عدة أعداد من الوسيطات إلى دالة lambda والتي يمكن أن تحتوي على تعبير واحد فقط. في بعض الأحيان ، يمكن تمرير دالة lambda إلى وظائف أخرى كوسيطة. يمكن أن تعمل الوظيفة عند تعريفها بالكلمة الأساسية "def" في لغة python كوظيفة عادية.

أوضح المقال ، بالتالي ، مفاهيم وظائف lambda في لغة python ، وتطبيقها مع وظائف أخرى وأيضًا بعض الأمثلة. إذا كنت مهتمًا أيضًا باكتساب الخبرة في لغة البرمجة وإتقان مهاراتك في الترميز ، فيمكنك التحقق من الدورة التدريبية " برنامج PG التنفيذي في علوم البيانات " التي تقدمها upGrad . إنه مصمم خصيصًا لجميع المهنيين المبتدئين الذين تتراوح أعمارهم بين 21 و 45 عامًا والذين يرغبون في تحقيق مهاراتهم في الترميز في علم البيانات. إذا كنت على استعداد لاتخاذ خطوة نحو أحلامك ، فتقدم وألق نظرة على فوائد الدورة. من خلال مشاريع الصناعة العملية ، تم تصميم الدورة التدريبية التي يقدمها IIIT-B لتلبية احتياجاتك وإعدادك للصناعات الكبرى القادمة.

ما هو الفرق بين الوظيفة العادية ودالة لامدا؟

نحن نعلم أنه يتم تحديد دالة في Python باستخدام الكلمة الأساسية def. وبالمثل ، يتم تعريف دالة لامدا باستخدام الكلمة الأساسية لامدا. ضع في اعتبارك المثال أدناه لفهم الفرق بين الاثنين بعمق:
# Normal function def sq (x): return x * x # Lambda function lambda_sq = lambda x: x * x # استدعاء الوظيفة المحددة بشكل طبيعي print (sq (10)) # باستخدام وظيفة lambda print (lambda_sq (10)) }
يوضح المثال أعلاه وظيفتين لحساب مربع الرقم. بدون لامدا ، علينا إنشاء دالة sq (x) ، ثم إعادة المربع. من ناحية أخرى ، مع لامدا ، تغلي الوظيفة بأكملها في سطر واحد. لا تتطلب Lambda بيان الإرجاع.