Python Match

در پایتون 3.10 به بعد، یک ساختار جدید به نام match / case معرفی شده است که شبیه switch در زبان‌های دیگر عمل می‌کند و برای الگو‌یابی (Pattern Matching) استفاده می‌شود.
در این درسنامه، این قابلیت را مرحله‌به‌مرحله بررسی می‌کنیم.

🔹 ساختار پایه

match variable: case pattern1: # کد اجرا می‌شود اگر variable با pattern1 هم‌خوانی داشته باشد case pattern2: # ... case _: # حالت پیش‌فرض (مشابه default)

🔹 مثال ساده

command = "start" match command: case "start": print("شروع برنامه") case "stop": print("توقف برنامه") case _: print("دستور نامعتبر")

📌 خروجی:

شروع برنامه

🔹 چند الگو در یک خط (OR pattern)

می‌توان چند مقدار را با هم بررسی کرد:

day = "sat" match day: case "sat" | "sun": print("تعطیلات آخر هفته") case "mon": print("شروع هفته") case _: print("روز عادی")

🔹 الگوهای متغیر (Binding Variables)

می‌توان مقداری که در شرط قرار می‌گیرد را در یک متغیر ذخیره کرد:

user = ("Ali", 25) match user: case (name, age): print(f"نام: {name}, سن: {age}")

📌 خروجی:

نام: Ali, سن: 25

🔹 الگو با شرط اضافی (Guards)

می‌توان روی یک الگو شرط اضافه کرد:

x = 7 match x: case n if n > 10: print("بزرگتر از 10") case n if n > 5: print("بین 6 تا 10") case _: print("5 یا کمتر")

📌 خروجی:

بین 6 تا 10

🔹 الگو برای ساختارهای تو در تو

data = {"type": "point", "coords": (10, 20)} match data: case {"type": "point", "coords": (x, y)}: print(f"نقطه با مختصات ({x}, {y})") case _: print("الگوی نامشخص")

📌 خروجی:

نقطه با مختصات (10, 20)

✅ نکات مهم

  • نیاز به پایتون 3.10 یا بالاتر دارید.

  • علامت _ به معنی الگوی پیش‌فرض (default) است.

  • می‌توان از OR (|)، شرط (if)، و الگوهای تو در تو استفاده کرد.

  • بر خلاف switch در زبان‌های دیگر، نیازی به break نیست.

💡 تمرین پیشنهادی

  1. برنامه‌ای بنویس که عددی از کاربر بگیرد و با match مشخص کند:

    • اگر 1 یا 2 بود: "عدد کوچک"

    • اگر بین 3 تا 5 بود: "عدد متوسط"

    • در غیر این صورت: "عدد بزرگ".

  2. دیکشنری شامل نوع شکل و ابعاد بگیرد و بسته به نوع شکل (circle, rectangle) محیط یا مساحت را محاسبه کند.

ساختار match/case کد را خواناتر و مدیریت چندین شرط پیچیده را ساده‌تر می‌کند و جایگزین عالی برای چندین if ... elif ... else در شرایط خاص است.