اذهب إلى المحتوى
  • 0

ما هي وظيفة دوال Lambda ؟

Ahmed Elsamman

السؤال

عند كتابه الكود ::

my_list = ['id1', 'id22 ' , 'id3' , 'id100', 'id40']

my_list.sort(key = lambda x : int(x[2:]))

print(my_list)

 

لماذا نضيف الدالة الي متغير key   بعينه ولا نتسطيع تغير الاسم او لماذا لا نكتب الدالة مباشره كما نكتبها في داله print

تم التعديل في بواسطة عبدالباسط ابراهيم
تعديل العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

في الكود الذي قمت بتقديمه، يتم استخدام دالة مساعدة (lambda function) كمتغير key في دالة sort(). دعنا نلقي نظرة على السبب وراء ذلك:

دالة sort() في لغة Python تستخدم لترتيب قائمة وفقًا لمعيار معين. المعيار المستخدم لترتيب العناصر في القائمة يمكن تخصيصه باستخدام متغير key.

في الكود الخاص بك، تم استخدام key = lambda x: int(x[2:]) لتحديد المعيار الذي سيتم استخدامه في ترتيب العناصر في القائمة. تقوم الدالة lambda بتحويل العناصر في القائمة إلى أعداد صحيحة بدءًا من المؤشر 2 ومن ثم يتم استخدام هذه الأعداد لترتيب العناصر.

السبب في استخدام دالة مساعدة (lambda function) بدلاً من كتابة الدالة مباشرة في دالة sort() هو القدرة على تخصيص المعيار بسهولة. باستخدام دالة lambda، يمكنك تعريف معيار ترتيب مخصص بشكل سريع ومباشر واستخدامه في دالة sort() دون الحاجة إلى تعريف دالة منفصلة.

بالنسبة للتسمية، يمكنك تغيير اسم المتغير key إلى أي اسم تريده. يعتمد ذلك على تفضيلاتك الشخصية وقراءة الكود الأكثر وضوحًا وفهمًا.

لمزيد من الوضوح والقراءة السلسة للكود، يمكنك استخدام الدالة lambda بشكل منفصل وتعريفها قبل استخدامها في دالة sort() كما يلي:

my_list = ['id1', 'id22', 'id3', 'id100', 'id40']

custom_key = lambda x: int(x[2:])
my_list.sort(key=custom_key)

print(my_list)

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يتم استخدام الدالة الموجودة في متغير key كدالة تحويل (transform function)، والتي تستخدم لتحويل كل عنصر في القائمة قبل الفرز. في حالتنا، تحويل العناصر يتم بإزالة الحرفين الأولين من كل عنصر في القائمة، ثم تحويل النتيجة إلى قيمة صحيحة (integer) باستخدام دالة int()، وهذا يتم بإستخدام التعبير اللامبدا (lambda expression).

يمكن تغيير اسم المتغير key إلى اسم آخر، لكن يجب الاحتفاظ بالمعنى الذي يحمله، والذي يعني "الدالة التي تستخدم لتحويل العناصر قبل الفرز". ويمكن استخدام دالة مخصصة بدلاً من التعبير اللامبدا في المتغير key، وستعمل بنفس الطريقة، أي تحويل العناصر قبل الفرز.

يتم استخدام الدالة print() لإظهار قائمة العناصر المرتبة بعد الفرز، وليست لتحويل العناصر قبل الفرز. لذلك، يجب تحديد دالة تحويل (transform function) مخصصة باستخدام المتغير key لتحويل العناصر قبل الفرز، ولا يمكن استخدام دالة print() لهذا الغرض.

مثال آخر على الشرح

لنفترض أن لدينا قائمة من الأسماء ونريد ترتيبها بحسب طول كل اسم. يمكن استخدام المتغير key لتحديد دالة تحويل (transform function) تستخدم لتحويل كل عنصر في القائمة قبل الفرز. في هذه الحالة، يمكن استخدام دالة len() لتحويل كل عنصر في القائمة إلى طوله قبل الفرز. يمكن استخدام المتغير key لتحديد دالة التحويل كالتالي:

my_list = ['John', 'Bob', 'Alice', 'Mike', 'David']
my_list.sort(key=lambda x: len(x))
print(my_list)

في هذا المثال، تم استخدام التعبير اللامبدا (lambda expression) في المتغير key لإنشاء دالة تحويل مخصصة. تستخدم هذه الدالة دالة len() لتحويل كل عنصر في القائمة إلى طوله، ثم يتم فرز القائمة وفقًا لطول كل عنصر فيها. سيتم طباعة النتيجة كالتالي:

['Bob', 'John', 'Mike', 'Alice', 'David']

ويمكن ملاحظة أن الأسماء مرتبة حسب طولها بدءًا من الأصغر إلى الأكبر.

إذا كان السؤال خاص بدورة ما في الأكاديمية يفضل السؤال أسفل الفيديو وسيتم الإجابة بأسرع وقت

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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

وفي الكود الخاص بك، تستخدم دالة Lambda في وضعها كمعامل لمتغير key في دالة sort()، مما يعني أن الدالة اللامدا تُعين كمعيار (key) لتحديد كيفية ترتيب العناصر في القائمة.

تفسير الدالة lambda : 

lambda x: int(x[2:])
  • lambda: الكلمة المفتاحية لإنشاء الدالة اللامبدا.
  • x: هو المعامل المستخدم في الدالة.
  • int(x[2:]): تحويل جزء من السلسلة x إلى عدد صحيح (integer)، حيث يتم استخراج الجزء من المؤشر 2 وما بعده.

وباستخدام تلك الدالة، يتم تحويل قيمة العنصر في القائمة إلى عدد صحيح، ومن ثم يتم استخدامها كمعيار لترتيب العناصر في القائمة.

وتستطيع الإعتماد على دالة print() بشكل مباشر دون استخدام الدالة اللامبدا في هذا السياق، ولكن في حالة الدالة sort()، تحتاج إلى تحديد المعيار الذي يتم استخدامه في الترتيب، وهو السبب في استخدام الدالة اللامدا كمعامل لمتغير key.

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بشكل عام نستعمل lambda عندما نريد تابع بسيط يقوم بعملية بسيطة و نريد تمريره إلى تابع ما.

في بايثون خصوصاً دالة lambda لا يمكن أن تكون معقدة، و بالتالي في حال أردت القيام بعملية معقدة عليك إنشاء تابع عادي لها.

أيضاً في حال كنت تريد استعمال هذه العملية كثيراً فمن غير الجيد في كل مرة أن نقوم بتعريف lambda بل من الأفضل تعريف تابع واحد يتم استدعاءه في مختلف الأماكن في الكود، و بالتالي نستعمل lambda غالباً للتوابع التي لن نستعملها كثيراً أو في أكثر من مكان في الكود.

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...