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.
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.
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:
>>> # 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):
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().