آموزش دستورات break و continue در python + تفاوت اون ها به زبان ساده

آموزش دستورات break و continue در python + تفاوت اون ها به زبان ساده

آموزشی
20 مهر 1405

توجه: این ویدیو بخشی از دوره رایگان آموزش پایتون در گیک باز هستش.

 

اگر حتی یک حلقه هم در پایتون اجرا کرده باشید میدونید، از زمانی که حلقه اجرا شده تا زمانی که تموم شده عملا کاری نتونستید این بین انجام بدید درسته؟! (حالا میخواد for باشه یا while باشه فرقی نداره).

دقیقا دو دستور break و continue اومدن این بخش خالی رو برای ما توی حلقه های پایتون پر کنن.

 

دستور break در پایتون چیست؟

break حلقه رو در همون لحظه متوقف میکنه و برنامه به اولین خط بعد از حلقه میره و ادامه پیدا میکنه. یه جورایی میشه گفت مثل ترمز دستی حلقه هستن، هرجا که پایتون توی اون روند حلقه بهش بر بخوره، بدون اینکه اصلا کاری به اجرای ادامه حلقه داشته باشه؛ از اون خارج میشه و ادامه برنامه رو اجرا میکنه.

نحوه کارکرد دستور break در پایتون به شکل زیر است:

دستور break در پایتون چطور کار میکنه؟

نکته کلی: هر وقتی که توی برنامه تون به نتیجه ای که خواستید رسیدید، دلیلی نداره بقیه حلقه رو اجرا کنید (چه از نظر پرفرومنسی و چه کد استاندارد قابل توجیه نیست) باید از دستور break استفاده کنید که زمانی تلف نشه در برنامه.

 

استفاده از break در حلقه for با مثال کاربردی و واقعی

فک کنید که شما یک لیستی از سفارش های فروشگاه رو دارید و دقیقا دنبال یک کد سفارش بخصوص هستید. و وقتی که پیداش کردید دلیلی نداره که حلقه تا انتها اجرا بشه.

نکته: همیشه حواستون باشه پروژه هایی که در حالت پروداکشن و در حال اجرا هستن؛ میتونن حجم عظیمی از داده ها رو در طی زمان ذخیره کرده باشن، پس شاید دستور break در یک حلقه 100 یا 1000 تایی خودش رو نشون نده، ولی وقتی جلوگیری بکنه از اجرا شدن چندین میلیون بار اجرای مجدد حلقه، اون موقع بیشتر متوجه ارزش دستور brerak میشید.

مثال:

orders = ["A102", "B220", "C315", "D480"]
target = "C315"

for order in orders:
    print(f"Checking {order}...")
    if order == target:
        print(f"Order {order} found!")
        break  # پیدا شد؛ دیگر ادامه نده

خروجی:

Checking A102...
Checking B220...
Checking C315...
Order C315 found!

دقت کردید که سفارش D480 اصلا حتی بررسی هم نشد. حالا اگر لیست بزرگ تر بود دیگه هر ایتمی که بعد از C315 میبود اصلا بررسی نمیشد.

 

استفاده از دستور break در حلقه while با مثال کاربردی و واقعی

الگوی while True و دستور break از پرکاربردترین الگوهای پایتون هستن؛ مخصوصا وقتی میخواید یک منطقی بنوسید که خودتون هم نمیدونید باید چند بار تکرار بشه.

برای همین یک حلقه بی نهایت تعریف میکنید و در صورت نیاز با دستور break حلقه رو مهار میکنید که بیشتر از اون ادامه نده.

مثل منوی یک برنامه یا گرفتن ورودی از کاربر:

while True:
    command = input("Command (type 'exit' to quit): ")
    if command == "exit":
        print("Goodbye!")
        break
    print(f"Running: {command}")

خروجی:

Command (type 'exit' to quit): save
Running: save
Command (type 'exit' to quit): exit
Goodbye!

توجه: بدون دستور break این حلقه هیچوقت تموم نمیشد، چون شرط True همیشه درسته.

 

دستور continue در پایتون چیست؟ 

continue حلقه رو متوقف نمیکنه؛ در هر جایی از حلقه که پایتون بهش بر بخوره، بقیه کدهای حلقه رو در دور فعلی اش نادیده میگیره و حلقه به آغازش برمیگرده و شرط چک میشه و دور بعدی حلقه اجرا میشه (البته اگر اصلا دور بعدی بر اساس شرطتتون وجود داشته باشه).

کاربرد اصلی دستور continue رد کردن داده هایی هست که نباید پردازش بشن.

نحوه کارکرد دستور continue در پایتون به شکل عکس زیر است:

نحوه کارکرد دستور continue در حلقه پایتون

 

استفاده از دستور continue در حلقه for 

مثلا میخواید خبرنامه رو فقط برای اون کاربرهایی بفرستید که عضو شده باشن:

users = [
    {"name": "Sara", "subscribed": True},
    {"name": "Ali", "subscribed": False},
    {"name": "Reza", "subscribed": True},
]

for user in users:
    if not user["subscribed"]:
        continue  # این کاربر را رد کن و برو سراغ نفر بعدی
    print(f"Sending newsletter to {user['name']}")

خروجی:

Sending newsletter to Sara
Sending newsletter to Reza

نکته: حلقه از علی رد شد، اما حلقه برای بقیه کاربر ها ادامه پیدا کرد.

 نکته باحال برای گیک ها:

continue کد رو تمیزتر میکنه اما چرا اینو میگم؛ به جای اینکه بیایم کل منطق اصلی رو ببریم زیر یک if بزرگ و کدرو تو در تو کنیم، اون حالت های نامعتبر رو همون اول با دستور continue کنار میگذاریم (توی کد پیچیده بیشتر خودشو نشون میده). به این الگو Guard Clause میگن.

 

استفاده از دستور continue در حلقه while (مراقب حلقه های بی نهایت باشید)

یکی از رایج ترین باگ تازه کارها با continue همین جاست. اگر continue قبل از تغییر شماره (متغییری که شرط بهش گره خورده) اجرا بشه، شمارنده هیچوقت عوض نمیشه و حلقه تا ابد ادامه پیدا میکنه.

حالت اشتباه (حلقه بی نهایت):

i = 0
while i < 5:
    if i == 2:
        continue  # شمارنده هرگز زیاد نمی‌شود!
    print(i)
    i += 1

حالت درست (اول شمارنده رو تغییر دادیم بعد دستور continue اومده):

i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)

قانون ساده: در حلقه while، شمارنده رو قبل از continue مقدارش آپدیت کنید.

 

تفاوت break و continue در پایتون

بیاید با کد تفاوت رو بهتون نشون بدم، با اجرای یک حلقه یکسان با هر دو:

numbers = [1, 2, 3, 4, 5]

print("break:")
for n in numbers:
    if n == 3:
        break
    print(n, end=" ")

print("\ncontinue:")
for n in numbers:
    if n == 3:
        continue
    print(n, end=" ")

توجه: ارگومان end=" " که به print داده شد در واقع میگه بعد از هر چاپ به جای اینکه به خط بعد برود فقط بعد از چاپ یک فاصله بگذارد.
نکته برای گیک ها:
دلیل اینکه بعد از هر چاپی که با دستور print صورت میگیرد (در حالت نرمال)، چاپ بعدی در خط جدید صورت میگیرد این است که مقدار ارگومان end به صورت پیشفرض "\n" است.

خروجی:

break:
1 2
continue:
1 2 4 5

با break حلقه روی عدد 3 تموم شد اما با continue فقط عدد 3 چاپ نشد ولی حلقه تا اخر رفت.

  • break: حلقه رو همان لحظه کامل متوقف میکنه.
  • continue: بقیه دور فعلی رو رد میکنه و سراغ دور بعدی میره.

 

خلاصه ای از break و continue در پایتون

ویژگیbreakcontinue
کار اصلیخروج کامل از حلقهرد شدن از دور فعلی
حلقه ادامه پیدا میکنه؟خیربله
اجرا از کجا ادامه میکنه؟اولین خط بعد از حلقهابتدای دور بعدی حلقه
تاثیر روی else حلقهelse اجرا نمیشهتاثیری نداره
کاربرد رایججستجو، خروج از منوفیلتر کردن داده نامعتبر

اگر به تاثیر else در حلقه ها علاقه دارید میتونید مقالات حلقه while در پایتون، حلقه for در پایتون رو مطالعه کنید.

author-avatar
سعید امینینویسنده مقاله

الان بیشتر از 6 ساله که مشغول برنامه نویسی وب هستم و در طول این مدت کلی چالش رو پشت سر گذاشتم و عاشق اینم که هر چیزی رو که در این مدت یاد گرفتم رو به بقیه هم یاد بدم، الانم در بستر سایت گیک باز دارم دانشم رو با بقیه تقسیم میکنم :)

نظرات

هنوز نظری وجود ندارد! شما اولین نفر باشید...