Guido van Rossum Python'a kalıp eşleştirme operatörleri eklemeyi önerdi

Guido van Rossum gönderilen topluluk incelemesi için taslak özellikler Python'da kalıp eşleştirme operatörlerini (eşleşme ve durum) uygulamak için. Desen eşleştirme operatörlerinin eklenmesine yönelik tekliflerin 2001 ve 2006'da zaten yayınlanmış olduğuna dikkat edilmelidir (pep-0275, pep-3103), ancak eşleşen zincirleri derlemek için "if ... elif ... else" yapısının optimize edilmesi lehine reddedildi.

Yeni uygulama, Scala, Rust ve F#'da sağlanan ve belirtilen bir ifadenin sonucunu "case" operatörüne dayalı olarak bloklar halinde listelenen kalıpların listesiyle karşılaştıran "eşleştirme" operatörüne çok benzer. C, Java ve JavaScript'te bulunan "switch" operatörünün aksine, "match" tabanlı ifadeler çok daha fazlasını sunar geniş işlevsellik. Önerilen operatörlerin kodun okunabilirliğini artıracağı, rastgele Python nesnelerinin karşılaştırılmasını ve hata ayıklamayı basitleştireceği ve ayrıca genişletilmiş genişletme olasılığı nedeniyle kodun güvenilirliğini artıracağı belirtiliyor. statik tip kontrolü.

def http_error(durum):
maç durumu:
durumda 400:
"Kötü istek" döndür
durum 401|403|404:
"İzin verilmiyor" ifadesini döndür
durumda 418:
"Ben bir çaydanlığım" ifadesini döndür
dava _:
"Başka bir şey" ifadesini döndür

Örneğin, değişkenleri mevcut değerlere göre bağlamak için nesneleri, kayıtları, listeleri ve rastgele dizileri açabilirsiniz. İç içe geçmiş şablonların tanımlanmasına, şablonda ek "if" koşullarının kullanılmasına, maskelerin ("[x, y, *rest]") kullanılmasına, anahtar/değer eşlemelerinin (örneğin, {"bant genişliği": b, "gecikme) kullanılmasına izin verilir. ”: l} "bant genişliği" ve "gecikme" değerlerini ve sözlüğünü çıkarmak için, alt şablonları çıkarın (":=" operatörü), şablonda adlandırılmış sabitleri kullanın. Sınıflarda “__match__()” yöntemini kullanarak eşleştirme davranışını özelleştirmek mümkündür.

veri sınıflarından veri sınıfını içe aktar

@veri sınıfı
sınıf Noktası:
x:int
y:int

def burada(nokta):
maç puanı:
durum Noktası(0, 0):
print("Köken")
durum Noktası(0, y):
print(f"Y={y}")
durum Nokta(x, 0):
print(f"X={x}")
vaka Noktası():
print("Başka bir yerde")
dava _:
print("Bir nokta değil")

maç puanı:
case Nokta(x, y) eğer x == y:
print(f"Y=X, {x}")
durum Nokta(x, y):
print(f"Köşegende değil")

KIRMIZI, YEŞİL, MAVİ = 0, 1, 2
renk eşleme:
durum.KIRMIZI:
print("Kırmızı görüyorum!")
durumda. YEŞİL:
print("Çim yeşildir")
durumda.BLU
E:
print(“Üzülüyorum :(“)

İnceleme için bir set hazırlandı yamalar deneysel ile uygulama önerilen spesifikasyon, ancak son versiyon hala tartışılıyor. Örneğin, sunulan Varsayılan değer için "case _:" ifadesi yerine "else:" veya "default:" anahtar kelimesini kullanın, çünkü diğer bağlamlarda "_" geçici bir değişken olarak kullanılır. Ayrıca, yeni ifadelerin "if ... elif ... else" yapılarında kullanılana benzer bayt koduna çevrilmesine dayanan ve çok büyük karşılaştırma kümelerini işlerken istenen performansı sağlamayacak olan dahili organizasyon da sorgulanabilir.

Kaynak: opennet.ru

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster