هدى جبور نشر 8 مارس 2022 أرسل تقرير نشر 8 مارس 2022 (معدل) مرحبًا ما المقصود من الكلمة yield في بايثون؟ رايتها هنا في هذا المقطع من الكود: def validate(sent, stats): for s in sent: aspects = s.find('aspectTerms') or [] for aspect in list(aspects): polarity = aspect.attrib['pol'] if polarity == 'conflict': aspects.remove(aspect) stats['conflicts'] += 1 if not aspects: stats['rejected'] += 1 continue yield s تم التعديل في 8 مارس 2022 بواسطة Ali Haidar Ahmad توضيح عنوان السؤال 1 اقتباس
0 Ali Haidar Ahmad نشر 8 مارس 2022 أرسل تقرير نشر 8 مارس 2022 أولاً: ما هي yield. yield عبارة عن كلمة مفتاحية في Python تُستخدم للعودة من الدالة بدون تدمير حالة المتغيرات المحلية "local variable" الخاص بها وعندما يتم استدعاء الدالة، يبدأ التنفيذ من حيث توقفت الدالة في المرة الأخيرة عندما صادفت الكلمة المفتاحية yield. أي دالة تحتوي على الكلمة المفتاحية yield تسمى مولد "generator". وبالتالي، فإن yield هو الذي يتم من خلاله صنع المولد. هذه الكلمة المفتاحية قليلة الشهرة في بايثون ومع ذلك لها فائدة أكثر مما قد تتوقعينه. ثانياً:أمثلة لتوضيح عمله. مثال 1: # generator to print even numbers # مولّد لطباعة الأعداد الفردية def printOdd(numbers) : for i in numbers: if i % 2 != 0: yield i # تحديد مجموعة من الأرقام numbers = [1, 2, 5, 4, 9] # طباعة الأعداد الفردية print ("The even numbers in list are : ", end = " ") for j in printOdd(numbers): print (j, end = " ") # الخرج: # The even numbers in list are : 1 5 9 كما ذكرت فإن أي دالة تحتوي على هذه الكلمة المفتاحية يكون اسمها مولّد، وهذا ما يؤكده الاستدعاء التالي: printOdd(numbers) # <generator object printOdd at 0x00000216842B4DC8> لاحظ أيضاً في المثال السابق أن j تقوم بالمرور على عناصر هذا المولد، وفي كل استدعاء له يقوم بالتنفيذ من حيثما توقف بدلاً من العودة للبداية. مثال 2: # برنامج لتوليد مربعات الأعداد من 1 ل 50 # سنعرّف الآن دالة توليد لانهائية تقوم بتوليد مربعات الأعداد بدءاً من 1 def nextSquare(): i = 1 # حلقة لانهائية لتوليد مربعات الأعداد while True: yield i*i i += 1 # الاستدعاء التالي للدالة سيتم فيها بدء التنفيذ من هنا # استدعاء الدالة لتحقيق المطلوب for num in nextSquare(): if num > 50: break print(num) لاحظ أن التنفيذ بعد كل استدعاء يبدأ من التعليمة التي تلي yield، ففي أول استدعاء يبدأ التنفيذ من بداية الدالة، لكن في الاستدعاءات التالي يتم التنفيذ بدءاً من السطر الذي أشرت إليه في الكود. 1 اقتباس
السؤال
هدى جبور
مرحبًا
ما المقصود من الكلمة yield في بايثون؟ رايتها هنا في هذا المقطع من الكود:
توضيح عنوان السؤال
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.