Python 3.10 programlama dilinin yayınlanması

Bir yıllık geliştirme sürecinin ardından Python 3.10 programlama dilinin önemli sürümü sunuldu. Yeni şubeye XNUMX yıl destek verilecek, ardından XNUMX yıl daha güvenlik açıklarını ortadan kaldıracak düzeltmeler üretilecek.

Aynı zamanda Python 3.11 şubesinin alfa testi başladı (yeni geliştirme planına uygun olarak, yeni şube üzerindeki çalışmalar önceki şubenin yayınlanmasından beş ay önce başlıyor ve bir sonraki sürüme kadar alfa testi aşamasına ulaşıyor) ). Python 3.11 şubesi yedi ay boyunca alfa sürümünde olacak ve bu süre zarfında yeni özellikler eklenecek ve hatalar düzeltilecek. Bundan sonra beta sürümleri üç ay boyunca test edilecek, bu süre zarfında yeni özellik eklenmesi yasaklanacak ve tüm dikkat hataların düzeltilmesine gösterilecek. Çıkıştan önceki son iki ay boyunca şube, sürüm adaylığı aşamasında olacak ve bu aşamada nihai stabilizasyon gerçekleştirilecek.

Python 3.10'ye yapılan yeni eklemeler şunları içerir:

  • Desen eşleştirme için uygulanan "eşleştirme" ve "durum" operatörleri, kodun okunabilirliğini artırır, rastgele Python nesnelerinin eşleştirilmesini basitleştirir ve gelişmiş statik tür denetimi aracılığıyla kod güvenilirliğini artırır. 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.

    def http_error(status): eşleşme durumu: durum 400: dönüş “Kötü istek” durum 401|403|404: dönüş “İzin verilmiyor” durum 418: dönüş “Ben bir çaydanlıkım” durum _: dönüş “Başka bir şey”

    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} bir sözlükten "bant genişliği" ve "gecikme" değerlerini çıkarmak için, alt şablonları çıkarın (":=" operatörü), bir ş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 içe veri sınıfını @veri sınıfı sınıfı Nokta: x: int y: int def burada(nokta): eşleşme noktası: case Nokta(0, 0): print("Origin") case Nokta(0, y): print(f" Y={y}") case Nokta(x, 0): print(f"X={x}") case Nokta(): print("Başka bir yerde") case _: print("Bir nokta değil") eşleşme nokta: case Nokta(x, y) if x == y: print(f"Y=X, {x}")'da case Nokta(x, y): print(f"Köşegen üzerinde değil") KIRMIZI, YEŞİL, MAVİ = 0, 1, 2 renk eşleştir: durum KIRMIZI: yazdır(“Kırmızı görüyorum!”) durum YEŞİL: yazdır(“Çim yeşil”) durum MAVİ: yazdır(“Hüzünleri hissediyorum :(“)

  • Artık, bağlam yöneticileri koleksiyonunun tanımını birden fazla satıra bölmek için with ifadesinde parantez kullanmak mümkün. Gruptaki son içerik yöneticisinden sonra virgül bırakılmasına da izin verilir: ( CtxManager1() örnek1 olarak, CtxManager2() örnek2 olarak, CtxManager3() örnek3 olarak, ): ...
  • Dize değişmezlerindeki kapatılmamış ayraçlar ve tırnak işaretleri ile ilgili hataların kod konumunun raporlanması iyileştirildi. Örneğin, kapatılmamış bir parantez olduğunda, aşağıdaki yapıda bir sözdizimi hatası bildirmek yerine, işaretçi artık açılış parantezini vurgular ve kapanış bloğunun olmadığını gösterir. Dosya "example.py", satır 1 bekleniyor = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' asla kapatılmadı

    Ek özel sözdizimi hata mesajları eklendi: bir bloktan önce ve sözlüklerde eksik ":" sembolü, bir demetin parantezlerle ayrılmaması, listelerde virgülün eksik olması, "hariç" ve "nihayet" olmadan bir "try" bloğunun belirtilmesi, "= kullanılması Karşılaştırmalarda "= =" yerine, f-dizelerinde *-ifadeleri belirtmek. Ayrıca sorunlu ifadenin yalnızca başlangıcının değil tamamının vurgulanmasını ve yanlış girintilemeyle ilişkili hataların bağlamı hakkında daha açık bilgi verilmesini sağlar. >>> def foo(): ... if lel: ... x = 2 Dosya " ", satır 3 x = 2 ^ IndentationError: 2. satırdaki 'if' ifadesinden sonra girintili bir blok bekleniyordu

    Bir fonksiyondaki nitelik ve değişken adlarındaki yazım hatalarından kaynaklanan hatalarda, doğru isimle bir öneri çıktısı alınır. >>>collections.namedtoplo Traceback (en son çağrı son): Dosya « ", satır 1, içinde AttributeError: 'koleksiyonlar' modülünün 'namedtoplo' özelliği yok. Bunu mu demek istediniz: nametuple?

  • Hata ayıklama araçları ve profil oluşturucular için izleme olayları, yürütülen kodun tam satır numaralarıyla sağlanır.
  • TextIOWrapper ve open() ile UTF-8 kodlu dosyaların 'encoding=»utf-8″' seçeneğini açıkça belirtmeden işlenmesiyle ilişkili olası hatalar hakkında bir uyarı görüntülemek için sys.flags.warn_default_encoding ayarı eklendi (varsayılan olarak ASCII kodlaması kullanılır) . Yeni sürüm aynı zamanda kodlamayı geçerli yerel ayara göre ayarlamak için bir 'encoding='locale'' değeri belirtme olanağı da sağlıyor.
  • Yazım modülüne, tür açıklamalarını belirtmek için araçlar sağlayan ve “X | Y" türlerinden birini seçmek için (X tipi veya Y tipi). def square(sayı: int | float) -> int | float: return number ** 2, daha önce desteklenen yapıya eşdeğerdir: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Yazma modülüne Concatenate operatörü ve ParamSpec değişkeni eklenmiştir; bu, Callable'ı kullanırken statik tür kontrolü için ek bilgiler aktarmanıza olanak tanır. Yazma modülü ayrıca tür koruma işlevlerine açıklama eklemek için TypeGuard ve bir tür takma adını açıkça tanımlamak için TypeAlias ​​​​özel değerlerini de ekler. StrCache: TypeAlias ​​= 'Cache[str]' # bir tür takma adı
  • Zip() işlevi, belirtildiğinde yinelenen argümanların aynı uzunlukta olup olmadığını kontrol eden isteğe bağlı bir "katı" bayrağı uygular. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (en son çağrı son ): … ValueError: zip() argümanı 2 argüman 1'den daha uzun
  • Yeni yerleşik işlevler aiter() ve anext(), iter() ve next() işlevlerine eşzamansız analogların uygulanmasıyla önerilmektedir.
  • Küçük nesnelerle çalışırken str(), bytes() ve bytearray() yapıcılarının çalışması %30-40 oranında hızlandırıldı.
  • Runpy modülündeki içe aktarma işlemlerinin sayısı azaltıldı. "python3 -m modül_adı" komutu, içe aktarılan modüllerin sayısının 1.4'dan 69'e düşmesi nedeniyle artık ortalama 51 kat daha hızlı çalışıyor.
  • LOAD_ATTR talimatı, bireysel işlem kodları için bir önbellekleme mekanizması kullanır; bu, normal niteliklerle çalışmayı %36'ya kadar ve yuvalarla %44'e kadar hızlandırmayı mümkün kılar.
  • Python'u "--enable-optimizations" seçeneğiyle oluştururken, "-fno-semantic-interposition" modu artık etkindir; bu, "--enable-shared" ile oluşturmaya kıyasla yorumlayıcının %30'a kadar hızlandırılmasına olanak tanır " seçenek.
  • Hashlib ve SSL modülleri, OpenSSL 3.0.0 için destek ekledi ve 1.1.1'den eski OpenSSL sürümlerini desteklemeyi bıraktı.
  • Önceki dalda PEG (Ayrıştırma İfadesi Dilbilgisi) ayrıştırıcısı ile değiştirilen eski ayrıştırıcı kaldırıldı. Biçimlendirici modülü kaldırıldı. Döngü parametresi asyncio API'sinden kaldırıldı. Daha önce kullanımdan kaldırılan yöntemler kaldırıldı. Py_UNICODE* dizelerini işleyen Py_UNICODE_str* işlevleri kaldırıldı.
  • Distutils modülü kullanımdan kaldırıldı ve Python 3.12'de kaldırılması planlanıyor. Distutils yerine setuptools, package, platform, Shutil, subprocess ve sysconfig modüllerinin kullanılması tavsiye edilir. PyUnicodeObject'teki wstr yapısı kullanımdan kaldırıldı ve kaldırılması planlandı.

Kaynak: opennet.ru

Yorum ekle