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

Bir illik inkişafdan sonra Python 3.10 proqramlaşdırma dilinin əhəmiyyətli buraxılışı təqdim olunur. 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.11 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.11 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.10-yə yeni əlavələr daxildir:

  • Kod oxunuşunu yaxşılaşdıran, ixtiyari Python obyektlərinin uyğunlaşdırılmasını sadələşdirən və qabaqcıl statik tip yoxlanışı vasitəsilə kodun etibarlılığını artıran nümunə uyğunluğu üçün tətbiq olunan "match" və "case" operatorları. Tətbiq Scala, Rust və F# proqramlarında təqdim edilən "uyğunluq" operatoruna bənzəyir, hansı ki, müəyyən edilmiş ifadənin nəticəsini "case" operatoru əsasında bloklarda sadalanan nümunələrin siyahısı ilə müqayisə edir.

    def http_error(status): uyğunluq statusu: hal 400: qaytar "Bad sorğu" halda 401|403|404: qaytar "İcazə verilmir" halda 418: qaytar "Mən çaydanam" halda _: "Başqa bir şey" qaytar

    Mövcud dəyərlərə əsaslanan dəyişənləri bağlamaq üçün obyektləri, dəstləri, siyahıları və ixtiyari ardıcıllıqları paketdən çıxara bilərsiniz. İçəri daxil edilmiş şablonları müəyyən etməyə, şablonda əlavə “if” şərtlərindən istifadə etməyə, maskalardan (“[x, y, *rest]”), açar/dəyər uyğunlaşdırmalarından (məsələn, {“bant genişliyi”: b, “gecikmə”dən istifadə etməyə icazə verilir. ”: l} lüğətdən "bant genişliyi" və "gecikmə" dəyərlərini çıxarmaq üçün, alt şablonları çıxarın (":=" operatoru), şablonda adlandırılmış sabitlərdən istifadə edin. Dərslərdə “__match__()” metodundan istifadə edərək uyğun davranışı fərdiləşdirmək mümkündür.

    dataclass import dataclass @dataclass class Nöqtə: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") halda Nöqtə(x, 0): çap(f"X={x}") halda Nöqtə(): print("Başqa yerdə") hal _: print("Nöqtə deyil") uyğunluq point: case Nöqtə(x, y) əgər x == y: çap(f"Y=X at {x}") halda Nöqtə(x, y): çap(f"Diaqonalda deyil") QIRMIZI, YAŞIL, MAVİ = 0, 1, 2 uyğun rəng: qutu QIRMIZI: çap("Mən qırmızı görürəm!") qutu YAŞIL: çap ("Ot yaşıldır") qutu MAVİ: çap("Mən blues hiss edirəm :(")

  • İndi kontekst menecerləri toplusunun tərifini çoxlu sətirlərə bölmək üçün with ifadəsində mötərizələrdən istifadə etmək mümkündür. Qrupda son kontekst menecerindən sonra vergül qoymağa da icazə verilir: ilə ( CtxManager1() misal1, CtxManager2() misal2, CtxManager3() misal3, ): ...
  • Sətir literallarında bağlanmamış mötərizə və sitatlarla əlaqəli səhvlərin kod yerinin təkmilləşdirilmiş hesabatı. Məsələn, bağlanmamış mötərizə olduqda, aşağıdakı konstruksiyada sintaksis xətası haqqında məlumat vermək əvəzinə, göstərici indi açılış mötərizəsini vurğulayır və bağlama blokunun olmadığını göstərir. "example.py" faylı, 1-ci sətir gözlənilən = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^Sintaksis Xətası: '{' heç vaxt bağlanmayıb

    Əlavə ixtisaslaşmış sintaksis xətası mesajları əlavə edildi: blokdan əvvəl və lüğətlərdə ":" simvolu çatışmır, mötərizə ilə dəstəni ayırmamaq, siyahılarda vergül buraxmaq, "istincə" və "nəhayət" olmadan "sınamaq" blokunu təyin etmək, "=" istifadə edərək Müqayisələrdə "= =" əvəzinə " f-sətirlərində *-ifadələri təyin edin. Bundan əlavə, o, yalnız başlanğıcın deyil, bütün problemli ifadənin vurğulanmasını və yanlış abzasla əlaqəli səhvlərin konteksti haqqında daha açıq məlumatı təmin edir. >>> def foo(): ... əgər lel: ... x = 2 Fayl " ", sətir 3 x = 2 ^ IndentationError: 2-ci sətirdə "if" ifadəsindən sonra girintili blok gözlənilir

    Funksiyadakı atributların və dəyişən adlarının adlarında yazı xətaları nəticəsində yaranan səhvlərdə düzgün adla tövsiyə verilir. >>>collections.namedtoplo Traceback (ən son zəng): Fayl « ", sətir 1, in AttributeError: "koleksiyonlar" modulunun "namedtoplo" atributu yoxdur. Bunu nəzərdə tutursunuz: nametuple?

  • Sazlama alətləri və profilçilər üçün izləmə hadisələri yerinə yetirilən kodun dəqiq sətir nömrələri ilə təmin edilir.
  • TextIOWrapper və 'encoding=»utf-8″' seçimini açıq şəkildə göstərmədən UTF-8 kodlu faylları emal edən open() ilə əlaqəli potensial xətalar haqqında xəbərdarlıq göstərmək üçün sys.flags.warn_default_encoding parametri əlavə edildi (ASCII kodlaşdırma defolt olaraq istifadə olunur) . Yeni buraxılış həmçinin cari yerli dil əsasında kodlaşdırmanı təyin etmək üçün 'encoding="locale"' dəyərini təyin etmək imkanı verir.
  • Yazma moduluna tip annotasiyalarını təyin etmək üçün alətlər təqdim edən, “X | növlərdən birini (X növü və ya Y növü) seçmək üçün Y" düyməsini basın. def kvadrat(nömrə: int | float) -> int | float: qaytarma nömrəsi ** 2 əvvəl dəstəklənən konstruksiyaya bərabərdir: def square(nömrə: Union[int, float]) -> Union[int, float]: qaytarma nömrəsi ** 2
  • Concatenate operatoru və ParamSpec dəyişəni çap moduluna əlavə edilmişdir ki, bu da Callable-dan istifadə edərkən statik növün yoxlanılması üçün əlavə məlumat ötürməyə imkan verir. Yazma modulu, həmçinin növün mühafizəsi funksiyalarını qeyd etmək üçün TypeGuard və tip ləqəbini açıq şəkildə müəyyən etmək üçün TypeAlias ​​xüsusi dəyərləri əlavə edir. StrCache: TypeAlias ​​= 'Keş[str]' # tip təxəllüsü
  • zip() funksiyası isteğe bağlı “ciddi” bayraq tətbiq edir, müəyyən edildikdə, təkrarlanan arqumentlərin eyni uzunluqda olub-olmadığını yoxlayır. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(aralıq(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) İzləmə (ən son zəng son ): … ValueError: zip() arqument 2 arqument 1-dən uzundur
  • iter() və next() funksiyalarının asinxron analoqlarının həyata keçirilməsi ilə yeni quraşdırılmış aiter() və anext() funksiyaları təklif olunur.
  • Kiçik obyektlərlə işləyərkən str(), bytes() və bytearray() konstruktorlarının işi 30-40% sürətləndirilib.
  • Sürətli modulda idxal əməliyyatlarının sayı azaldıldı. İndi “python3 -m module_name” əmri idxal olunan modulların 1.4-dan 69-ə endirilməsi hesabına orta hesabla 51 dəfə sürətlə işləyir.
  • LOAD_ATTR təlimatı fərdi əməliyyat kodları üçün keşləmə mexanizmindən istifadə edir ki, bu da adi atributlarla işi 36%-ə qədər, slotlarla isə 44%-ə qədər sürətləndirməyə imkan verdi.
  • Python-u “--enable-optimizations” seçimi ilə qurarkən “-fno-semantic-interposition” rejimi artıq aktivləşdirilib ki, bu da “-enable-shared” seçimi ilə qurmaqla müqayisədə tərcüməçini 30%-ə qədər sürətləndirməyə imkan verir. ” seçimi.
  • Hashlib və ssl modulları OpenSSL 3.0.0 üçün dəstəyi əlavə etdi və 1.1.1-dən köhnə OpenSSL versiyalarını dəstəkləməyi dayandırdı.
  • Əvvəlki budaqda PEG (Parsing Expression Grammar) analizatoru ilə əvəz edilmiş köhnə parser silindi. Formatlaşdırıcı modul silindi. Döngə parametri asyncio API-dən silindi. Əvvəllər köhnəlmiş üsullar silindi. Py_UNICODE* sətirlərini manipulyasiya edən Py_UNICODE_str* funksiyaları silindi.
  • Distutils modulu köhnəldi və Python 3.12-də silinməsi planlaşdırılır. Distutils əvəzinə quraşdırma alətləri, qablaşdırma, platforma, shutil, subprocess və sysconfig modullarından istifadə etmək tövsiyə olunur. PyUnicodeObject-də wstr strukturu köhnəlib və silinməsi planlaşdırılıb.

Mənbə: opennet.ru

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