Python 3.9 programlama dilinin yayınlanması

Bir yıllık geliştirmenin ardından gönderilen önemli programlama dili sürümü Python 3.9. Python 3.9, bundan sonraki ilk sürümdü. перехода üzerinde proje yeni döngü yayınların hazırlanması ve desteklenmesi. Artık yılda bir kez yeni büyük sürümler oluşturulacak ve her iki ayda bir düzeltici güncellemeler yayınlanacak. Her önemli şube bir buçuk yıl boyunca desteklenecek, ardından güvenlik açıklarını gidermek için üç buçuk yıl daha geliştirilecek.

Yeni bir şube üzerindeki çalışmalar artık bir sonraki şubenin yayınlanmasından beş ay önce başlıyor; Python 3.9'un piyasaya sürülmesiyle aynı zamana denk geliyor başladı Python 3.10 dalının alfa testi. Python 3.10 dalı yedi ay boyunca alfa sürümünde olacak ve bu süre zarfında yeni özellikler eklenecek ve hatalar giderilecek. 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 içerisinde şube, nihai stabilizasyonun gerçekleştirileceği sürüm adayı aşamasında olacak.

Arasında katma yenilikler Python 3.9'da:

  • Yerleşik dict sınıfı kullanılarak tanımlanan sözlüklerde, göründü birleştirme operatörleri için destek "|" ve daha önce sözlüklerin birleştirilmesi için önerilen {**d1, **d2} ve dict.update yöntemlerini tamamlayan "|=" güncellemeleri.

    >>> x = {"anahtar1": "x'ten değer1", "anahtar2": "x'ten değer2"}
    >>> y = {"anahtar2": "y'den gelen değer2", "anahtar3": "y'den gelen değer3"}

    >>> x | sen
    {'anahtar1': 'x'ten değer1', 'anahtar2': 'y'den değer2', 'anahtar3': 'y'den değer3'}

    >>> ve | X
    {'anahtar2': 'x'ten değer2', 'anahtar3': 'y'den değer3', 'anahtar1': 'x'ten değer1'}

  • Yerleşik tür koleksiyonu, yazma modülünden içe aktarmaya gerek kalmadan temel türler olarak kullanılabilen list, dict ve tuple'ı içerir. Onlar. Artık.List yazmak yerine, Dict ve Typing.Tuple'ı belirtebilirsiniz.
    sadece listeleyin, dikte edin ve tuple yapın:

    def greet_all(isimler: liste[str]) -> Yok:
    isimlerdeki isim için:
    print("Merhaba", isim)

  • Sağlanır Fonksiyonlara ve değişkenlere açıklama eklemek için esnek araçlar. Ek açıklamalar eklemek için, yazma modülüne yeni bir Açıklamalı tür eklendi ve mevcut türler, statik analiz veya çalışma zamanı optimizasyonları için kullanılabilecek ek meta verilerle genişletildi. Koddan meta verilere erişmek için, type.get_type_hints() yöntemine include_extras parametresi eklenmiştir.

    charType = Annotated[int, ctype(«char»)] UnsignedShort = Annotated[int, struct2.ctype(‘H’)]

  • Tonlama azaltıldı Dekoratörler için gramer gereksinimleri - if ve while bloklarında kullanılmaya uygun herhangi bir ifade artık dekoratör olarak kullanılabilir. Değişiklik, PyQt5 kodunun okunabilirliğini önemli ölçüde geliştirdi ve bu modülün bakımını basitleştirdi:

    Oldu:
    button_0 = buttons[0] @button_0.clicked.connect

    Şimdi şunu yazabilirsiniz:
    @buttons[0].tıklandı.bağlan

  • Standart kütüphaneye katma modül bölge bilgisiIANA saat dilimi veritabanındaki bilgileri içerir.

    >>> ZoneInfo'dan ZoneInfo'yu içe aktarın
    >>> tarihsaatten tarihsaati içe aktar, timedelta
    >>> # Yaz saati
    >>> dt = tarihsaat(2020, 10, 31, 12, tzinfo=ZoneInfo("Amerika/Los_Angeles"))
    >>> yazdır(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PASİFİK YAZ SAATİ'

    >>> # Standart saat
    >>> dt += timedelta(gün=7)
    >>> yazdır(dt)
    2020-11-07 12:00:00-08:00

    >>> yazdır(dt.tzname())
    PST

  • Graphlib modülü eklendi; uygulandı Grafiklerin topolojik sıralaması için destek.
  • Önerilen önekleri ve satır sonlarını kaldırmak için yeni yöntemler - str.removeprefix(prefix) ve str.removesuffix(suffix). str, bytes, bytearray ve koleksiyonlar.UserString nesnelerine yöntemler eklendi.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Çubuk'

  • Dahil olmuş yeni ayrıştırıcı PEG (Ayrıştırıcı İfade Dilbilgisi Ayrıştırma) ayrıştırıcının yerini aldı LL(1). Yeni ayrıştırıcının kullanılması, LL(1)'deki kısıtlamaları aşmak için kullanılan bazı "hacklerden" kurtulmayı mümkün kıldı ve ayrıştırıcının bakımı için gereken işçilik maliyetlerini önemli ölçüde azalttı. Performans açısından yeni ayrıştırıcı öncekiyle hemen hemen aynı seviyede ancak esneklik açısından önemli ölçüde ilerisinde, bu da yeni dil özellikleri tasarlarken kendinizi daha özgür hissetmenizi sağlıyor. Eski ayrıştırıcı kodu şimdilik korunuyor ve "-X oldparser" bayrağı veya "PYTHONOLDPARSER=1" ortam değişkeni kullanılarak döndürülebilir, ancak 3.10 sürümünde kaldırılacaktır.
  • Tarafından sunulan C uzantı yöntemlerinin, PyState_FindModule işlevini kullanarak modül durumunu aramak yerine doğrudan işaretçi referansını kullanarak tanımlandıkları modüllerin durumuna erişme yeteneği. Değişiklik, modül durumunu kontrol etme yükünü azaltarak veya tamamen ortadan kaldırarak C modüllerinin performansını artırmanıza olanak tanır. Bir modülü bir sınıfla ilişkilendirmek için PyType_FromModuleAndSpec() C fonksiyonu, modülü ve durumunu elde etmek için PyType_GetModule() ve PyType_GetModuleState() C fonksiyonları önerildi ve sınıfa erişimi olan bir yöntem sağlandı. tanımlandığı yerde, C-fonksiyonu PyCMethod ve METH_METHOD bayrağı önerilmektedir.
  • Çöp toplayıcı teslim edilmiş Sonlandırıcı çalıştırıldıktan sonra dışarıdan erişilebilen, yeniden canlandırılan nesneleri içeren koleksiyonların kilitlenmesinden.
  • Eklenen yöntem os.pidfd_open, Linux çekirdek alt sistemi "pidfd"nin PID yeniden kullanım durumunu ele almak için kullanılmasına olanak tanır (pidfd belirli bir işlemle ilişkilendirilir ve değişmez, oysa bir PID, o PID ile ilişkili mevcut işlem sona erdikten sonra başka bir işlemle ilişkilendirilebilir) ).
  • Unicode spesifikasyonu desteği 13.0.0 sürümüne güncellendi.
  • elendi bellek sızıntısı Python yorumlayıcısını aynı süreçte yeniden başlatırken.
  • Yerleşik range, tuple, set, frozenset, list ve dict türlerinin performansı optimize edildi. uygulandı C dilinde yazılmış nesnelere daha hızlı erişim için Vectorcall kısayol protokolünün kullanılması yoluyla.
  • _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operatör, kaynak, zaman ve _weakref modülleri şuradan yüklenir: birkaç aşamada başlatma.
  • Standart kütüphane modülleri audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios ve zlib, kısıtlı kullanıma dönüştürüldü istikrarlı ABIPython'un farklı sürümleri için genişletme modülü derlemelerinin çalışabilirliği sorununu çözen (sürüm güncellenirken, genişletme modüllerini yeniden oluşturmaya gerek yoktur ve 3.9 için derlenen modüller 3.10 dalında çalışabilecektir).
  • Asyncio modülü, olası güvenlik sorunları nedeniyle reuse_address parametresine yönelik desteği kaldırmıştır (Linux'ta UDP için SO_REUSEADDR'nin kullanılması, farklı işlemlerin bir UDP bağlantı noktasına dinleme yuvaları eklemesine olanak tanır).
  • Yeni optimizasyonlar eklendi; örneğin, çok iş parçacıklı uygulamalarda sinyal işleyicilerin performansı iyileştirildi, FreeBSD ortamında alt işlem modülünün hızı artırıldı ve geçici değişkenlerin daha hızlı atanması ([expr'de “for y” ifadesine bir değişken atanması) ]” artık “y = expr” " ifadesi kadar performanslıdır. Genel olarak çoğu test gösteri şube 3.8 ile karşılaştırıldığında performans düşüşü (hızlanma yalnızca write_local ve write_deque testlerinde gözlemlenir):

    Python sürümü 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Değişken ve nitelik okuma erişimi:
    read_local 7.1 7.1 5.4 5.1 3.9 4.0
    read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
    read_global 15.5 19.0 14.3 13.6 7.6 7.7
    read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
    read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 ​​45.0 46.8 18.4 23.2
    read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Değişken ve nitelik yazma erişimi:
    write_local 8.7 9.3 5.5 5.3 4.3 4.2
    write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    write_global 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Veri yapısı okuma erişimi:
    okuma_listesi 24.2 24.5 20.8 20.8 19.0 21.1
    read_deque 24.7 25.5 20.2 20.6 19.8 21.6
    read_dict 24.3 25.7 22.3 23.0 21.0 22.5
    read_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Veri yapısı yazma erişimi:
    yazma_listesi 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    write_dict 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Yığın (veya kuyruk) işlemleri:
    list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    Zamanlama döngüsü:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Kaldırıldı html.parser.HTMLParser'daki unescape() yöntemi de dahil olmak üzere, daha önce kullanımdan kaldırılan ve önceki sürümde DeprecationWarning ile sonuçlanan birçok Python 2.7 işlevi ve yöntemi,
    array.array'de tostring() ve fromstring(), threading.Thread'de isAlive(), ElementTree'de getchildren() ve getiterator(), sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ve base64.decodestring().

Kaynak: opennet.ru

Yorum ekle