גידו ואן רוסום טיוטה לבדיקת הקהילה להטמעת אופרטורים של התאמת דפוסים (התאמה ומקרה) ב-Python. יש לציין שהצעות להוספת אופרטורים של התאמת דפוסים כבר פורסמו בשנים 2001 ו-2006 (, ), אך נדחו לטובת אופטימיזציה של המבנה "אם ... elif ... else" להידור שרשראות תואמות.
היישום החדש דומה מאוד לאופרטור "התאמה" המסופק ב-Scala, Rust ו-F#, אשר משווה את התוצאה של ביטוי שצוין עם רשימה של דפוסים הרשומים בבלוקים המבוססים על האופרטור "case". בניגוד לאופרטור "switch" הזמין ב-C, Java ו-JavaScript, ביטויים מבוססי "התאמה" מציעים הרבה יותר . יצוין כי האופרטורים המוצעים ישפרו את קריאות הקוד, יפשטו את ההשוואה של אובייקטי Python שרירותיים ואיתור באגים, וכן יגבירו את אמינות הקוד הודות לאפשרות הרחבה .
def http_error(סטטוס):
סטטוס התאמה:
מקרה 400:
החזר "בקשה גרועה"
מקרה 401|403|404:
החזר "אסור"
מקרה 418:
חזרה "אני קומקום תה"
מקרה_:
החזר "משהו אחר"
לדוגמה, אתה יכול לפרוק אובייקטים, טופלים, רשימות ורצפים שרירותיים כדי לאגד משתנים על סמך ערכים קיימים. מותר להגדיר תבניות מקוננות, להשתמש בתנאי "אם" נוספים בתבנית, להשתמש במסכות ("[x, y, *rest]"), מיפוי מפתח/ערך (לדוגמה, {"רוחב פס": b, "שהייה ”: l} כדי לחלץ ערכי "רוחב פס" ו-"חביון" ומילון), לחלץ תבניות משנה (":=" אופרטור), השתמש בקבועים בעלי שם בתבנית. במחלקות, ניתן להתאים אישית את התנהגות ההתאמה באמצעות שיטת "__match__()".
מ-dataclasses ייבוא dataclass
@dataclass
נקודת מחלקה:
x:int
y:int
def whereis (נקודה):
נקודת שוויון:
נקודת מקרה (0, 0):
print ("מקור")
נקודת מקרה (0, y):
print(f"Y={y}")
נקודת מקרה (x, 0):
print(f"X={x}")
נקודת מקרה():
print("מקום אחר")
מקרה_:
print("לא נקודה")
נקודת שוויון:
נקודת מקרה (x, y) אם x == y:
print(f"Y=X ב-{x}")
נקודת מקרה (x, y):
print(f"לא באלכסון")
אדום, ירוק, כחול = 0, 1, 2
צבע תואם:
מקרה .RED:
print("אני רואה אדום!")
מקרה .GREEN:
print("דשא ירוק")
מקרה .BLU
E:
print(“אני מרגיש את הבלוז :(“)
ערכה הוכנה לבדיקה עם ניסיוני המפרט המוצע, אבל הגרסה הסופית עדיין . לדוגמה, במקום הביטוי "case _:" עבור ערך ברירת המחדל, השתמש במילת המפתח "else:" או "default:", שכן "_" בהקשרים אחרים משמש כמשתנה זמני. מוטלת בספק גם הארגון הפנימי, שמבוסס על תרגום ביטויים חדשים לקוד בתים בדומה לזה המשמש למבני "אם ... elif ... else", אשר לא יספקו את הביצועים הרצויים בעת עיבוד קבוצות גדולות מאוד של השוואות.
מקור: OpenNet.ru
