تعد وظائف Lambda في Python طريقة فعالة لإنشاء وظائف صغيرة مجهولة المصدر أثناء التنقل. تُستخدم هذه الوظائف عادةً لعمليات قصيرة وبسيطة حيث يكون الحمل الزائد لتعريف الوظيفة الكاملة غير ضروري.
بينما يتم تعريف الوظائف التقليدية باستخدام الكلمة الأساسية def، يتم تعريف وظائف Lambda باستخدام الكلمة الأساسية lambda ويتم دمجها مباشرة في سطور التعليمات البرمجية. على وجه الخصوص، غالبًا ما يتم استخدامها كوسائط للوظائف المضمنة. إنها تمكن المطورين من كتابة تعليمات برمجية نظيفة وقابلة للقراءة من خلال التخلص من الحاجة إلى تعريفات الوظائف المؤقتة.
في هذه المقالة، سنغطي ما تفعله وظائف Lambda وصياغتها. وسنقدم أيضًا بعض الأمثلة وأفضل الممارسات لاستخدامها، ونناقش إيجابياتها وسلبياتها.
كانت وظائف Lambda جزءًا من لغة Python منذ الإصدار 2.0، لذا ستحتاج إلى:
في هذا البرنامج التعليمي، سنرى كيفية استخدام وظائف 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 بشكل خاص في المواقف التي نحتاج فيها إلى وظيفة بسيطة مؤقتًا. على وجه الخصوص، يتم استخدامها بشكل شائع كوسائط للوظائف ذات الترتيب الأعلى.
دعونا نرى بعض الأمثلة العملية.
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 كما يلي:
# 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]
تقوم الدالة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 في عمليات فهم القائمة لإجراء العمليات الحسابية السريعة.
لنفترض أن لدينا قائمة بالأرقام. نريد:
إليك كيف يمكننا القيام بذلك:
# 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 الأكثر تقدمًا مفيدة.
دعونا نرى بعض الأمثلة.
يمكن دمج وظائف 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 ولا تفوت أي مشاركة أبدًا!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3