Python 3.11 proqramlaşdırma dilinin buraxılışı

Bir illik inkişafdan sonra Python 3.11 proqramlaşdırma dilinin əhəmiyyətli buraxılışı nəşr olundu. Yeni filial bir il yarım ərzində dəstəklənəcək, bundan sonra daha üç il yarım ərzində zəiflikləri aradan qaldırmaq üçün onun üçün düzəlişlər yaradılacaq.

Eyni zamanda, Python 3.12 filialının alfa sınağı başladı (yeni inkişaf cədvəlinə uyğun olaraq, yeni filial üzərində iş əvvəlki filialın buraxılmasından beş ay əvvəl başlayır və növbəti buraxılış zamanı alfa test mərhələsinə çatır. ). Python 3.12 filialı yeddi ay ərzində alfa buraxılışda olacaq, bu müddət ərzində yeni funksiyalar əlavə olunacaq və səhvlər düzəldiləcək. Bundan sonra, beta versiyaları üç ay ərzində sınaqdan keçiriləcək, bu müddət ərzində yeni funksiyaların əlavə edilməsi qadağan ediləcək və bütün diqqət xətaların aradan qaldırılmasına yönəldiləcək. Buraxılışdan əvvəl son iki ay ərzində filial buraxılış namizədi mərhələsində olacaq və bu mərhələdə yekun sabitləşmə aparılacaq.

Python 3.11-yə yeni əlavələr daxildir:

  • Performansın optimallaşdırılması üçün əhəmiyyətli işlər görülüb. Yeni filiala funksiya çağırışlarının sürətləndirilməsi və daxili yerləşdirilməsi, standart əməliyyatların sürətli tərcüməçilərinin istifadəsi (x+x, x*x, xx, a[i], a[i] = z, f(arg) ilə bağlı dəyişikliklər daxildir. C( arg), o.method(), o.attr = z, *seq), həmçinin Cinder və HotPy layihələri tərəfindən hazırlanmış optimallaşdırmalar. Yükün növündən asılı olaraq kodun icra sürətində 10-60% artım var. Orta hesabla, pyperformance test paketində performans 25% artdı.

    Bayt kodunun keşləmə mexanizmi yenidən işlənib ki, bu da tərcüməçinin işə salınma vaxtını 10-15% azaldıb. Kod və bayt kodu olan obyektlər indi tərcüməçi tərəfindən statik olaraq ayrılır ki, bu da keşdən çıxarılan bayt kodunun sıradan çıxarılması və dinamik yaddaşa yerləşdiriləcək kodu olan obyektlərin çevrilməsi mərhələlərini aradan qaldırmağa imkan verdi.

  • Diaqnostik mesajlarda zəng izlərini göstərərkən artıq xətaya səbəb olan ifadə haqqında məlumatı göstərmək mümkündür (əvvəllər xətanın hansı hissəsinin xətaya səbəb olduğunu təfərrüatlandırmadan yalnız xətt vurğulanırdı). Genişləndirilmiş iz məlumatı həmçinin API vasitəsilə əldə edilə bilər və codeobject.co_positions() metodundan və ya C API funksiyası PyCode_Addr2Location() istifadə edərək fərdi bayt kodu təlimatlarını mənbə kodundakı xüsusi mövqeyə uyğunlaşdırmaq üçün istifadə edilə bilər. Dəyişiklik daxili lüğət obyektləri, çoxsaylı funksiya çağırışları və mürəkkəb arifmetik ifadələrlə bağlı problemlərin aradan qaldırılmasını xeyli asanlaşdırır. Geri izləmə (ən son zəng): "calculation.py" faylı, sətir 54, nəticədə = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: sıfıra bölmə
  • İstisna qrupları üçün əlavə dəstək, proqrama eyni anda bir neçə fərqli istisna yaratmaq və emal etmək imkanı verir. Çoxsaylı istisnaları qruplaşdırmaq və onları birlikdə artırmaq üçün yeni istisna növləri ExceptionGroup və BaseExceptionGroup təklif edilmişdir və qrupdan fərdi istisnaları vurğulamaq üçün “istisna*” ifadəsi əlavə edilmişdir.
  • add_note() metodu BaseException sinfinə əlavə edilib və bu, istisnaya mətn qeydi əlavə etməyə imkan verir, məsələn, istisna atılan zaman mövcud olmayan kontekstual məlumatı əlavə edir.
  • Cari şəxsi sinfi təmsil etmək üçün xüsusi Self növü əlavə edildi. Öz sinfinin bir nümunəsini TypeVar-dan istifadə etməkdən daha sadə şəkildə qaytaran metodları şərh etmək üçün istifadə edilə bilər. sinif MyLock: def __enter__(self) -> Self: self.lock() özünə qayıdır
  • Yalnız LiteralString növü ilə uyğun gələn sətir literallarını (yəni, çılpaq və LiteralString sətirləri, lakin ixtiyari və ya birləşdirilmiş str sətirləri deyil) daxil edə bilən xüsusi LiteralString növü əlavə edildi. LiteralString növü sətir arqumentlərinin funksiyalara ötürülməsini məhdudlaşdırmaq üçün istifadə edilə bilər, məsələn, SQL sorğuları və ya qabıq əmrləri üçün sətirlər yaradan zaman zəifliklərə səbəb ola biləcək sətir hissələrinin ixtiyari dəyişdirilməsi. def run_query(sql: LiteralString) -> ... ... def zəng edən( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("SELECT * FROM Student") # ok run_query(literal_string) # ok run_query( "SEÇ * FROM" + literal_string) # ok run_query(ixtiyari_sətir) # Xəta run_query( # Xəta f"SEÇ * FROM tələbələrin adı = {ixtiyari_string}" )
  • Bir növü deyil, ixtiyari sayda növləri əhatə edən TypeVar-dan fərqli olaraq dəyişən generiklərin istifadəsinə imkan verən TypeVarTuple növü əlavə edilmişdir.
  • Standart kitabxanaya TOML formatını təhlil etmək üçün funksiyaları olan tomllib modulu daxildir.
  • Tələb olunan və isteğe bağlı sahələri müəyyən etmək üçün yığılmış lüğətlərin (TypedDict) ayrı-ayrı elementlərini Tələb olunan və NotRequired etiketləri ilə qeyd etmək mümkündür (ümumi parametr False olaraq təyin edilmədikdə, defolt olaraq bütün elan edilmiş sahələr tələb olunur). sinif Film(TypedDict): başlıq: str il: NotRequired[int] m1: Film = {"başlıq": "Qara Pantera", "il": 2018} # OK m2: Film = {"başlıq": "Ulduz Döyüşləri" } # OK (il sahəsi isteğe bağlıdır) m3: Film = {“il”: 2022} # Xəta, tələb olunan başlıq sahəsi doldurulmayıb)
  • TaskGroup sinfi bir qrup tapşırıqların tamamlanmasını gözləyən asinxron kontekst menecerinin tətbiqi ilə asyncio moduluna əlavə edilmişdir. Qrupa tapşırıqların əlavə edilməsi create_task() metodundan istifadə etməklə həyata keçirilir. async def main(): tg olaraq asyncio.TaskGroup() ilə async: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(başqa_coro(...)) print("Hər iki tapşırıq indi tamamlandı .")
  • Siniflər, metodlar və funksiyalar üçün @dataclass_transform dekoratoru əlavə edildi, müəyyən edildikdə, statik tip yoxlama sistemi obyektə sanki @dataclass.dataclass dekoratorundan istifadə edir. Aşağıdakı misalda, CustomerModel sinfi, növləri yoxlayarkən, @dataclasses.dataclass dekoratoru olan sinifə bənzər şəkildə işlənəcək, yəni. id və ad dəyişənlərini qəbul edən __init__ metodu kimi. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Normal ifadələrdə atom qruplaşması ((?>...)) və sahiblik kəmiyyətlandırıcılarından (*+, ++, ?+, {m,n}+) istifadə etmək imkanı əlavə edilmişdir.
  • Potensial təhlükəli fayl yollarının sys.path-a avtomatik əlavə edilməsini söndürmək üçün "-P" komanda xətti seçimi və PYTHONSAFEPATH mühit dəyişəni əlavə edildi.
  • Windows platforması üçün py.exe yardım proqramı “-V:” sintaksisi üçün dəstək əlavə etməklə əhəmiyyətli dərəcədə təkmilləşdirilmişdir. / " əlavə olaraq "- . "
  • C API-də bir çox makro normal və ya statik daxili funksiyalara çevrilir.
  • uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev və sunau modulları köhnəlib və Pythonda silinəcək. 3.13 buraxılışı. PyUnicode_Encode* funksiyaları silindi.

Mənbə: opennet.ru

Добавить комментарий