Python 3.11 programlama dilinin yayınlanması

Bir yıllık geliştirme sürecinin ardından Python 3.11 programlama dilinin önemli sürümü yayınlandı. Yeni şubeye XNUMX yıl destek verilecek, ardından XNUMX yıl daha güvenlik açıklarının giderilmesine yönelik düzeltmeler üretilecek.

Aynı zamanda Python 3.12 ş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.12 ş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.11'ye yapılan yeni eklemeler şunları içerir:

  • Performansı optimize etmek için önemli çalışmalar yapıldı. Yeni dal, işlev çağrılarının hızlandırılması ve satır içi konuşlandırılması, standart işlemlerin (x+x, x*x, xx, a[i], a[i] = z, f(arg) hızlı yorumlayıcılarının kullanılmasıyla ilgili değişiklikleri içerir. C( arg), o.method(), o.attr = z, *seq), ayrıca Cinder ve HotPy projeleri tarafından hazırlanan optimizasyonlar. Yük türüne bağlı olarak kod yürütme hızında %10-60 oranında artış olur. Ortalama olarak, pyperformans test paketinin performansı %25 arttı.

    Bayt kodu önbelleğe alma mekanizması yeniden tasarlandı ve bu, tercüman başlatma süresini %10-15 oranında azalttı. Kod ve bayt kodu içeren nesneler artık yorumlayıcı tarafından statik olarak tahsis ediliyor; bu, önbellekten çıkarılan bayt kodunun sırasını kaldırma ve dinamik belleğe yerleştirilecek kodlu nesneleri dönüştürme aşamalarını ortadan kaldırmayı mümkün kıldı.

  • Tanılama mesajlarında çağrı izlemeleri görüntülenirken, artık hataya neden olan ifadeyle ilgili bilgileri görüntülemek mümkün (daha önce, hattın hangi bölümünün hataya neden olduğu ayrıntılandırılmadan yalnızca satır vurgulanıyordu). Genişletilmiş izleme bilgileri API aracılığıyla da elde edilebilir ve codeobject.co_positions() yöntemini veya C API işlevi PyCode_Addr2Location()'ı kullanarak ayrı bayt kodu talimatlarını kaynak koddaki belirli bir konuma eşlemek için kullanılabilir. Değişiklik, iç içe geçmiş sözlük nesneleri, çoklu işlev çağrıları ve karmaşık aritmetik ifadelerle ilgili sorunların hatalarını ayıklamayı çok daha kolay hale getiriyor. Geri izleme (en son çağrı): Dosya "calculation.py", satır 54, sonuç = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: sıfıra bölme
  • İstisna grupları için destek eklendi ve programa aynı anda birkaç farklı istisna oluşturma ve işleme yeteneği kazandırıldı. Birden fazla istisnayı gruplandırmak ve bunları bir araya getirmek için, yeni istisna türleri ExceptionGroup ve BaseExceptionGroup önerildi ve bir gruptaki istisnaları tek tek vurgulamak için "hariç*" ifadesi eklendi.
  • BaseException sınıfına add_note() yöntemi eklenmiştir; bu yöntem, istisnaya bir metin notu eklemenize, örneğin istisna atıldığında kullanılamayan bağlamsal bilgileri eklemenize olanak tanır.
  • Geçerli özel sınıfı temsil edecek özel bir Self türü eklendi. Self, sınıfının bir örneğini döndüren yöntemlere TypeVar kullanmaktan daha basit bir şekilde açıklama eklemek için kullanılabilir. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • Yalnızca LiteralString türüyle uyumlu dize değişmez değerlerini içerebilen özel bir LiteralString türü eklendi (ör. çıplak ve LiteralString dizeleri, ancak rastgele veya birleştirilmiş str dizeleri hariç). LiteralString türü, dize bağımsız değişkenlerinin işlevlere aktarılmasını sınırlamak, örneğin SQL sorguları veya kabuk komutları için dizeler oluştururken güvenlik açıklarına yol açabilecek dize parçalarının rastgele değiştirilmesini sınırlamak için kullanılabilir. def run_query(sql: LiteralString) -> ... ... def arayan( arbitrary_string: str, query_string: LiteralString, tablo_adı: LiteralString, ) -> Yok: run_query("Öğrencilerden * SEÇ") # tamam run_query(literal_string) # tamam run_query( "SELECT * FROM" + değişmez_string) # tamam run_query(arbitrary_string) # Error run_query( # Error f"SELECT * FROM Students WHERE name = {arbitrary_string}" )
  • TypeVarTuple türü eklendi ve TypeVar'ın aksine, tek bir türü değil isteğe bağlı sayıda türü kapsayan değişken jeneriklerin kullanımına izin verildi.
  • Standart kütüphane, TOML formatını ayrıştırmaya yönelik işlevlere sahip tomllib modülünü içerir.
  • Zorunlu ve isteğe bağlı alanları belirlemek için yazılan sözlüklerin (TypedDict) ayrı ayrı öğelerini Gerekli ve Gerekli Değil etiketleriyle işaretlemek mümkündür (varsayılan olarak, toplam parametre False olarak ayarlanmamışsa bildirilen tüm alanlar gereklidir). sınıf Movie(TypedDict): title: str yıl: Gerekli Değil[int] m1: Film = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # Tamam (yıl alanı isteğe bağlıdır) m3: Film = {“yıl”: 2022} # Hata, gerekli başlık alanı doldurulmamış)
  • TaskGroup sınıfı, bir grup görevin tamamlanmasını bekleyen eşzamansız bir içerik yöneticisinin uygulanmasıyla asyncio modülüne eklenmiştir. Bir gruba görev eklemek, create_task() yöntemi kullanılarak yapılır. async def main(): tg olarak asyncio.TaskGroup() ile eşzamansız: görev1 = tg.create_task(some_coro(...)) görev2 = tg.create_task(another_coro(...)) print("Her iki görev de şimdi tamamlandı .")
  • Sınıflar, yöntemler ve işlevler için @dataclass_transform dekoratörü eklendi; belirtildiğinde, statik tür kontrol sistemi nesneyi @dataclasses.dataclass dekoratörünü kullanıyormuş gibi ele alır. Aşağıdaki örnekte, CustomerModel sınıfı, türleri kontrol ederken @dataclasses.dataclass dekoratörüne sahip bir sınıfa benzer şekilde işlenecektir; id ve name değişkenlerini kabul eden bir __init__ yöntemine sahip olmak. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Düzenli ifadelerde atomik gruplama ((?>...)) ve iyelik nicelik belirteçlerini (*+, ++, ?+, {m,n}+) kullanma yeteneği eklendi.
  • Güvenli olmayabilecek dosya yollarının sys.path dosyasına otomatik olarak eklenmesini devre dışı bırakmak için "-P" komut satırı seçeneği ve PYTHONSAFEPATH ortam değişkeni eklendi.
  • Windows platformu için py.exe yardımcı programı önemli ölçüde iyileştirildi ve “-V:” sözdizimi desteği eklendi. / " ek olarak "- . "
  • C API'sindeki birçok makro, normal veya statik satır içi işlevlere dönüştürülür.
  • Uu, cgi, pipe, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev ve sunau modülleri kullanımdan kaldırıldı ve Python'da kaldırılacak 3.13 sürümü. PyUnicode_Encode* işlevleri kaldırıldı.

Kaynak: opennet.ru

Yorum ekle