تُنفّذ else التابعة لحلقة for عند استنفاد العناصر؛ تنفيذ break يتجاوزها، وكذلك الخروج المبكر عبر return أو استثناء. [1]
اختُبرت المقاطع هنا باستخدام Python 3.12.14، واستُخدمت وثائق Python 3.14 لشرح السلوك؛ لم تُجرَ تجربة على إصدار 3.14.
الخلاصة السريعة
- ضع else بمحاذاة for؛ يصل البحث إليها حين ينتهي دون العثور على الهدف والخروج عبر break. [1]
- القائمة الفارغة تستنفد فورًا؛ لذلك تُنفّذ else دون تنفيذ جسم الحلقة. [2]
- تتجاوز continue بقية الدورة الحالية، ثم تنتقل إلى العنصر التالي أو إلى else عند انتهاء العناصر. [2]
- تخرج break من أقرب حلقة تحيط بها فقط؛ لا تُنهي تلقائيًا حلقة خارجية. [3]
جرّب البحث عن قيمة موجودة وأخرى غائبة
ضع else بمحاذاة for؛ يصل البحث إليها حين ينتهي دون العثور على الهدف والخروج عبر break. [1]
يطبع المقطع found 8 فقط. غيّر target إلى 5 وأعد تشغيله كاملًا؛ سيطبع not found. أبق else خارج if: المسافة البادئة تربطها بالحلقة. [1]
مرّر الشيفرة أفقيًا عند الحاجة.
values = [3, 8, 12]
target = 8
for value in values:
if value == target:
print("found", value)
break
else:
print("not found")افحص الحالة التي لا تبدأ فيها أي دورة
القائمة الفارغة تستنفد فورًا؛ لذلك تُنفّذ else دون تنفيذ جسم الحلقة. [2]
استبدل القائمة السابقة بقائمة فارغة: values = []. تظل النتيجة not found؛ الوصول إلى else لا يثبت فحص عنصر واحد. [2]
لا تعتمد على value بعد حلقة فارغة؛ لم تُسنِد إليه قيمة. وإذا كان موجودًا مسبقًا، فبقاؤه لا يثبت نجاح البحث. [2]
ميّز تجاوز عنصر من إنهاء البحث
تتجاوز continue بقية الدورة الحالية، ثم تنتقل إلى العنصر التالي أو إلى else عند انتهاء العناصر. [2]
يطبع هذا المقطع 0 ثم 5 ثم finished. العنصر السالب يمر عبر continue؛ لا يحدث خروج عبر break، وتستمر الحلقة حتى تنفد القائمة. تغيير القائمة إلى أعداد سالبة فقط يجعل finished الناتج الوحيد. [2]
مرّر الشيفرة أفقيًا عند الحاجة.
for value in [0, -2, 5]:
if value < 0:
continue
print(value)
else:
print("finished")انتبه إلى الحلقة التي تنهيها break
تخرج break من أقرب حلقة تحيط بها فقط؛ لا تُنهي تلقائيًا حلقة خارجية. [3]
في المثال المتداخل، تطبع الحلقة الداخلية أول قيمة من كل مجموعة ثم تتوقف. تنتقل الخارجية إلى المجموعة التالية؛ فيظهر 2 ثم 6، ولا يظهر 4. خروج الحلقة الداخلية لا يعني أن العمل كله انتهى. [3]
تتجاوز break فرع else الخاص بالحلقة التي أنهتها، إن وُجد. عند قراءة شيفرة متداخلة، حدّد أقرب for أو while تحتوي هذه العبارة قبل الحكم على أي فرع سيعمل؛ وجود break في مكان ما لا يكفي. [3]
مرّر الشيفرة أفقيًا عند الحاجة.
for group in [[2, 4], [6]]:
for value in group:
print(value)
breakالمصادر ومتابعة القراءة
- Python: else في الحلقات (يفتح في نافذة جديدة)docs.python.org
- Python: تعليمة for (يفتح في نافذة جديدة)docs.python.org
- Python: عبارتا break وcontinue (يفتح في نافذة جديدة)docs.python.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.