"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية استخدام وظائف لامدا في بايثون

كيفية استخدام وظائف لامدا في بايثون

تم النشر بتاريخ 2024-11-15
تصفح:888

How to Use Lambda Functions in Python

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

بينما يتم تعريف الوظائف التقليدية باستخدام الكلمة الأساسية def، يتم تعريف وظائف Lambda باستخدام الكلمة الأساسية lambda ويتم دمجها مباشرة في سطور التعليمات البرمجية. على وجه الخصوص، غالبًا ما يتم استخدامها كوسائط للوظائف المضمنة. إنها تمكن المطورين من كتابة تعليمات برمجية نظيفة وقابلة للقراءة من خلال التخلص من الحاجة إلى تعريفات الوظائف المؤقتة.

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

المتطلبات الأساسية

كانت وظائف Lambda جزءًا من لغة Python منذ الإصدار 2.0، لذا ستحتاج إلى:

  • الحد الأدنى لإصدار بايثون: 2.0.
  • إصدار بايثون الموصى به: 3.10 أو أحدث.

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

pip install pandas

بناء الجملة وأساسيات وظائف لامدا لبيثون

أولاً، دعونا نحدد مطوري بناء الجملة الذين يجب أن يستخدموا لإنشاء وظائف Lambda.

يتم تعريف دالة Lambda باستخدام الكلمة الأساسية lambda، متبوعة بوسيطة واحدة أو أكثر وتعبير:

lambda arguments: expression

لنتخيل أننا نريد إنشاء دالة Lambda تجمع رقمين:

add = lambda x, y: x   y

قم بتشغيل الأمر التالي:

result = add(3, 5)
print(result)

ينتج عن ذلك:

8

لقد أنشأنا دالة مجهولة تأخذ وسيطتين، x وy. على عكس الوظائف التقليدية، لا تحمل وظائف Lambda اسمًا: ولهذا السبب نقول إنها "مجهولة".

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

الآن دعونا نرى بعض حالات الاستخدام الشائعة لوظائف Lambda.

حالات الاستخدام الشائعة لوظائف Lambda

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

دعونا نرى بعض الأمثلة العملية.

استخدام وظائف Lambda مع وظيفة الخريطة ().

map() هي دالة مضمنة تطبق دالة معينة على كل عنصر من العناصر القابلة للتكرار وترجع كائن خريطة مع النتائج.

على سبيل المثال، لنفترض أننا نريد حساب الجذور التربيعية لكل رقم في القائمة. يمكننا استخدام دالة Lambda كما يلي:

# Define the list of numbers
numbers = [1, 2, 3, 4]

# Calculate square values and print results
squared = list(map(lambda x: x ** 2, numbers))
print(squared)

ينتج عن ذلك:

[1, 4, 9, 16]

لدينا الآن قائمة تحتوي على الجذور التربيعية للأرقام الأولية.

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

استخدام وظائف Lambda مع وظيفة التصفية ().

الآن، لنفترض أن لدينا قائمة من الأرقام ونريد تصفية الأرقام الزوجية.

يمكننا استخدام دالة Lambda كما يلي:

# Create a list of numbers
numbers = [1, 2, 3, 4]

# Filter for even numbers and print results
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)

ينتج عن ذلك:

[2,4]

استخدام وظائف Lambda مع الدالةsorted()

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

على سبيل المثال، لنفترض أن لدينا قائمة من النقاط في بعدين: (x,y). نريد إنشاء قائمة تقوم بترتيب قيم y بشكل متزايد.

يمكننا أن نفعل ذلك على النحو التالي:

# Creates a list of points
points = [(1, 2), (3, 1), (5, -1)]

# Sort the points and print
points_sorted = sorted(points, key=lambda point: point[1])
print(points_sorted)

ونحصل على:

[(5, -1), (3, 1), (1, 2)]

استخدام وظائف Lambda في قائمة الفهم

نظرًا لإيجازها، يمكن تضمين وظائف Lambda في عمليات فهم القائمة لإجراء العمليات الحسابية السريعة.

لنفترض أن لدينا قائمة بالأرقام. نريد:

  • التكرار على القائمة بأكملها
  • حساب وطباعة ضعف القيم الأولية.

إليك كيف يمكننا القيام بذلك:

# Create a list of numbers
numbers = [1, 2, 3, 4]

# Calculate and print the double of each one
squared = [(lambda x: x ** 2)(x) for x in numbers]
print(squared)

ونحصل على:

[1, 4, 9, 16]

مزايا استخدام وظائف Lambda

بالنظر إلى الأمثلة التي استكشفناها، فلنستعرض بعض مزايا استخدام وظائف Lambda:

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

القيود والعيوب

دعونا نناقش بإيجاز بعض القيود والعيوب في وظائف Lambda في بايثون:

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

أفضل الممارسات لاستخدام وظائف Lambda

الآن بعد أن تناولنا بعض الإيجابيات والسلبيات، دعنا نحدد بعض أفضل الممارسات لاستخدام وظائف Lambda بفعالية:

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

التقنيات المتقدمة مع وظائف Lambda

في بعض الحالات، يمكن أن تكون تقنيات وظيفة Lambda الأكثر تقدمًا مفيدة.

دعونا نرى بعض الأمثلة.

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

يمكن دمج وظائف Lambda في العمليات المعقدة.

هذه التقنية مفيدة في السيناريوهات التي تحتاج فيها إلى إجراء تحويلات صغيرة متعددة في تسلسل.

على سبيل المثال، لنفترض أنك تريد إنشاء دالة تحسب الجذر التربيعي لرقم ثم تضيف 1. إليك كيفية استخدام دوال Lambda للقيام بذلك:

# Create a nested lambda function
nested_lambda = lambda x: (lambda y: y ** 2)(x)   1

# Print the result for the value 3
print(nested_lambda(3))

تحصل على:

10

التكامل مع مكتبات بايثون للوظائف المتقدمة

تستفيد العديد من مكتبات Python من وظائف Lambda لتبسيط مهام معالجة البيانات المعقدة.

على سبيل المثال، يمكن استخدام وظائف Lambda مع Pandas وNumPy لتبسيط معالجة البيانات وتحويلها.

لنفترض أن لدينا إطار بيانات يحتوي على عمودين. نريد إنشاء عمود آخر يمثل مجموع العمودين الآخرين. في هذه الحالة، يمكننا استخدام وظائف Lambda على النحو التالي:

# Create the columns' data
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}

# Create data frame
df = pd.DataFrame(data)

# Create row C as A B and print the dataframe
df['C'] = df.apply(lambda row: row['A']   row['B'], axis=1)
print(df)

ونحصل على:

   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9

هذا كل ما في جولتنا السريعة حول وظائف Lambda في بايثون!

التفاف

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

تعليمات سعيدة!

ملاحظة: إذا كنت ترغب في قراءة منشورات Python بمجرد خروجها من الصحافة، فاشترك في النشرة الإخبارية لـ Python Wizardry ولا تفوت أي مشاركة أبدًا!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/appsignal/how-to-use-lambda-functions-in-python-3llj?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3