Gido van Rossum
Yangi tatbiq Scala, Rust va F# da taqdim etilgan "match" operatoriga o'xshaydi, bu ko'rsatilgan ifoda natijasini "case" operatoriga asoslangan bloklarda keltirilgan naqshlar ro'yxati bilan solishtiradi. C, Java va JavaScript-da mavjud bo'lgan "switch" operatoridan farqli o'laroq, "mos" ga asoslangan ifodalar ko'proq narsani taklif qiladi.
def http_error(status):
o'yin holati:
ish 400:
"Yomon so'rov" ni qaytarish
holat 401|403|404:
"Ruxsat berilmagan" ni qaytarish
ish 418:
Qaytish "Men choynakman"
case_:
"Boshqa narsani" qaytaring
Masalan, mavjud qiymatlar asosida o'zgaruvchilarni bog'lash uchun ob'ektlar, kortejlar, ro'yxatlar va ixtiyoriy ketma-ketliklarni ochishingiz mumkin. Ichki qoʻyilgan shablonlarni aniqlash, shablonda qoʻshimcha “agar” shartlaridan foydalanish, maskalardan (“[x, y, *rest]”), kalitlar/qiymatlarni koʻrsatishdan (masalan, {“tarmoq kengligi”: b, “kechikish”) foydalanishga ruxsat beriladi. ”: l} “o‘tkazish qobiliyati” va “kechikish” qiymatlari va lug‘atni chiqarish uchun, pastki shablonlarni (“:=” operatori) ajratib oling, shablonda nomlangan konstantalardan foydalaning. Sinflarda "__match__()" usuli yordamida mos keladigan xatti-harakatlarni sozlash mumkin.
ma'lumotlar sinflaridan ma'lumotlar sinfini import qilish
@ma'lumotlar sinfi
sinf nuqtasi:
x: int
y:int
def whereis(nuqta):
mos nuqtasi:
Case Point(0, 0):
chop ("kelib chiqishi")
Case Point(0, y):
chop etish (f"Y={y}")
Case Point(x, 0):
chop etish (f"X={x}")
case Point():
chop etish ("Boshqa joyda")
case_:
chop etish ("Bir nuqta emas")
mos nuqtasi:
case Point(x, y) agar x == y bo'lsa:
chop etish (f"Y=X da {x}")
Case Point(x, y):
chop etish (f"Diagonalda emas")
QIZIL, YASHIL, KO‘K = 0, 1, 2
mos rang:
Case .RED:
chop etish ("Men qizilni ko'raman!")
Case .GREEN:
chop etish ("O't yashil")
Case .BLU
E:
print("Men ko'k rangni his qilyapman :(")
Ko'rib chiqish uchun to'plam tayyorlandi
Manba: opennet.ru