יום חג לחנונים שאוהבים פיצ’רים חדשים בפייתון (היי)
החל מגרסה 3.10 יתווסף לפייתון כלי מגניב מאוד שצובר תאוצה בשנים האחרונות בשפות תכנות חדשות.
זה נקרא Pattern Matching וזה עובד כך:
from enum import Enum
class Color(Enum):
RED = 0
GREEN = 1
BLUE = 2
match color:
case Color.RED:
print("I see red!")
case Color.GREEN:
print("Grass is green")
case Color.BLUE:
print("I'm feeling the blues :(")
עד כאן יכול להיות שאתם שואלים “איך זה שונה מ־if/elif/else?” (או מ־switch case אם אתם נודדים משפות אחרות).
אחד ההבדלים הוא שאפשר, בעזרת תחביר מאוד פשוט, לבקש מפייתון לבחור הסתעפות לפי סוג/גודל המבנה:
match command.split():
case [action]:
... # interpret single-verb action
case [action, obj]:
... # interpret action, obj
מה שקורה שם זה שפייתון מוצא איך האובייקט שלכם נראה (איבר 1 אחרי ה־split? שני איברים?) והולך ל־case הרלוונטי.
אבל השוס האפילו יותר גדול, זה ש"על הדרך" הוא מבצע השמה: מה שיש באיבר הראשון ייכנס ל־action, ומה שיש באיבר השני (אם יש שני איברים) יכנס ל־object.
אפשר לממש ככה דברים יותר מסובכים וזה נראה ממש טוב:
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("Not a point")
לעוד פרטים, ראו את המדריך לשימוש ב־PEP 634 כאן (נקרא PEP 636).