Guido van Rossum
Η νέα υλοποίηση μοιάζει πολύ με τον τελεστή "ταιριάσματος" που παρέχεται στα Scala, Rust και F#, ο οποίος συγκρίνει το αποτέλεσμα μιας καθορισμένης έκφρασης με μια λίστα μοτίβων που παρατίθενται σε μπλοκ με βάση τον τελεστή "case". Σε αντίθεση με τον τελεστή "switch" που είναι διαθέσιμος σε C, Java και JavaScript, οι εκφράσεις που βασίζονται σε "ταιριάζουν" προσφέρουν πολύ περισσότερα
Def http_error(status):
κατάσταση αγώνα:
περίπτωση 400:
επιστροφή "Κακό αίτημα"
υπόθεση 401|403|404:
επιστροφή "Δεν επιτρέπεται"
περίπτωση 418:
επιστροφή "Είμαι τσαγιέρα"
υπόθεση_:
επιστροφή "Κάτι άλλο"
Για παράδειγμα, μπορείτε να αποσυσκευάσετε αντικείμενα, πλειάδες, λίστες και αυθαίρετες ακολουθίες για να συνδέσετε μεταβλητές με βάση τις υπάρχουσες τιμές. Επιτρέπεται ο ορισμός ένθετων προτύπων, η χρήση πρόσθετων συνθηκών "if" στο πρότυπο, η χρήση μασκών ("[x, y, *rest]"), αντιστοιχίσεις κλειδιών/τιμών (για παράδειγμα, {"εύρος ζώνης": b, "latency ”: l} για να εξαγάγετε τιμές και λεξικό "εύρος ζώνης" και "λανθάνουσα κατάσταση", να εξαγάγετε υποπρότυπα (":=" τελεστής), να χρησιμοποιήσετε επώνυμες σταθερές στο πρότυπο. Στις κλάσεις, είναι δυνατή η προσαρμογή της συμπεριφοράς αντιστοίχισης χρησιμοποιώντας τη μέθοδο "__match__()".
από κλάσεις δεδομένων εισαγωγής κατηγορίας δεδομένων
@dataclass
Σημείο τάξης:
x:int
y:int
def whereis(point):
στο σημειο του αγωνα:
case Point(0, 0):
εκτύπωση ("Προέλευση")
περίπτωση Σημείο(0, y):
print(f"Y={y}")
περίπτωση Σημείο(x, 0):
εκτύπωση(f"X={x}")
case Point():
εκτύπωση ("Κάπου αλλού")
υπόθεση_:
εκτύπωση ("Όχι ένα σημείο")
στο σημειο του αγωνα:
περίπτωση Σημείο(x, y) αν x == y:
εκτύπωση (f"Y=X σε {x}")
περίπτωση Σημείο(x, y):
εκτύπωση (f"Όχι στη διαγώνιο")
ΚΟΚΚΙΝΟ, ΠΡΑΣΙΝΟ, ΜΠΛΕ = 0, 1, 2
χρώμα ταιριάσματος:
θήκη .ΚΟΚΚΙΝΟ:
εκτύπωση ("Βλέπω κόκκινο!")
περίπτωση .ΠΡΑΣΙΝΟ:
εκτύπωση ("Το γρασίδι είναι πράσινο")
θήκη .BLU
E:
print ("Αισθάνομαι τα μπλουζ :(")
Έχει ετοιμαστεί ένα σετ για έλεγχο
Πηγή: opennet.ru