Python 3.10 dasturlash tilining chiqarilishi

Bir yillik rivojlanishdan so'ng, Python 3.10 dasturlash tilining muhim versiyasi taqdim etiladi. Yangi filial bir yarim yil davomida qo'llab-quvvatlanadi, shundan so'ng yana uch yarim yil davomida zaifliklarni bartaraf etish uchun tuzatishlar ishlab chiqariladi.

Shu bilan birga, Python 3.11 filialining alfa-sinovi boshlandi (yangi ishlab chiqish jadvaliga muvofiq, yangi filial bo'yicha ish oldingi filialning chiqarilishidan besh oy oldin boshlanadi va keyingi versiyada alfa-sinov bosqichiga etadi. ). Python 3.11 filiali yetti oy davomida alfa versiyasida bo‘ladi, bu vaqt davomida yangi funksiyalar qo‘shiladi va xatolar tuzatiladi. Shundan so'ng, beta-versiyalar uch oy davomida sinovdan o'tkaziladi, uning davomida yangi funksiyalarni qo'shish taqiqlanadi va barcha e'tibor xatolarni tuzatishga qaratiladi. Chiqarilishdan oldingi so'nggi ikki oy davomida filial nomzodlik bosqichida bo'ladi, bunda yakuniy barqarorlashtirish amalga oshiriladi.

Python 3.10 ga yangi qo'shimchalar quyidagilarni o'z ichiga oladi:

  • Kodni o'qishni yaxshilaydigan, ixtiyoriy Python ob'ektlarini moslashtirishni soddalashtiradigan va kengaytirilgan statik turdagi tekshirish orqali kod ishonchliligini oshiradigan naqsh moslashtirish uchun "mos" va "case" operatorlari joriy etildi. Amalga oshirish Scala, Rust va F# da taqdim etilgan "match" operatoriga o'xshaydi, bu ko'rsatilgan ifoda natijasini "case" operatoriga asoslangan bloklarda keltirilgan naqshlar ro'yxati bilan solishtiradi.

    def http_error(status): mos holati: 400-holat: “Yomon so‘rov” holatini qaytarish 401|403|404: “Ruxsat berilmagan” holatini qaytarish 418: “Men choynakman” holatini qaytarish _: “Boshqa narsa”ni qaytarish

    Mavjud qiymatlar asosida o'zgaruvchilarni bog'lash uchun ob'ektlar, kortejlar, ro'yxatlar va ixtiyoriy ketma-ketliklarni ochishingiz mumkin. Ichki qoʻyilgan shablonlarni aniqlash, shablonda qoʻshimcha “agar” shartlaridan foydalanish, niqoblardan (“[x, y, *rest]”), kalit/qiymatni koʻrsatishdan (masalan, {“tarmoq kengligi”: b, “kechikish”) foydalanishga ruxsat beriladi. ”: l} lug‘atdan “o‘tkazish qobiliyati” va “kechikish” qiymatlarini chiqarish, pastki shablonlarni (“:=” operatori) chiqarish, shablonda nomli konstantalardan foydalanish. Sinflarda “__match__()” usuli yordamida mos keladigan xatti-harakatlarni sozlash mumkin.

    dataclassdan import dataclass @dataclass class Nuqta: x: int y: int def whereis(nuqta): mos nuqtasi: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere otherwhere") case _: print("Not a point") match nuqta: holat Nuqta(x, y) agar x == y: chop etish(f"Y=X da {x}") holat Nuqta(x, y): chop etish(f"Diagonalda emas") QIZIL, YASIL, KO'K = 0, 1, 2 rang mos: rang qizil rang: chop etish ("Men qizilni ko'ryapman!") g'ilof Yashil: chop etish ("O't yashil") KO'K: chop etish ("Men ko'k rangni his qilyapman :(")

  • Endi kontekst boshqaruvchilari to'plamining ta'rifini bir nechta satrlarga bo'lish uchun with iborasida qavslardan foydalanish mumkin. Guruhdagi yakuniy kontekst boshqaruvchisidan keyin vergul qo'yishga ham ruxsat beriladi: ( CtxManager1() misol1, CtxManager2() misol2, CtxManager3() misol3, ): ...
  • Yopilmagan qavslar va satr harflaridagi qo'shtirnoqlar bilan bog'liq xatolar kodining joylashuvi to'g'risida yaxshilangan hisobot. Misol uchun, yopilmagan qavs mavjud bo'lganda, quyidagi konstruktsiyadagi sintaksis xatosi haqida xabar berish o'rniga, ko'rsatgich endi ochiladigan qavsni ta'kidlaydi va yopilish bloki yo'qligini ko'rsatadi. "example.py" fayli, 1-qator kutilmoqda = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' hech qachon yopilmagan

    Qo‘shimcha maxsus sintaktik xato xabarlari qo‘shildi: blok oldidan va lug‘atlarda “:” belgisi yo‘q, kortejni qavslar bilan ajratmaslik, ro‘yxatlarda vergul yo‘qligi, “bundan tashqari” va “nihoyat”siz “utib ko‘rish” blokini belgilash, “=” yordamida Taqqoslashda "= =" o'rniga " f-satrlarida *-ifodalarni ko'rsatish. Bundan tashqari, u faqat boshi emas, balki butun muammoli ifodani ajratib ko'rsatishni va noto'g'ri chiziq bilan bog'liq xatolar konteksti haqida aniqroq ma'lumotni ta'minlaydi. >>> def foo(): ... if lel: ... x = 2 Fayl " ", 3-qator x = 2 ^ IndentationError: 2-satrdagi "if" iborasidan keyin chekinish bloki kutildi

    Funksiyadagi atributlar va oʻzgaruvchilar nomlaridagi imlo xatolaridan kelib chiqqan holda, toʻgʻri nom bilan tavsiyanoma chiqariladi. >>>collections.namedtoplo Traceback (eng oxirgi qo‘ng‘iroq): Fayl « ", 1-qator, in AttributeError: "to'plamlar" modulida "namedtoplo" atributi yo'q. Siz nazarda tutdingizmi: nomli tuple?

  • Nosozliklarni tuzatish vositalari va profilchilar uchun kuzatuv hodisalari bajarilgan kodning aniq qator raqamlari bilan ta'minlanadi.
  • TextIOWrapper bilan bog‘liq bo‘lishi mumkin bo‘lgan xatolar haqida ogohlantirishni ko‘rsatish uchun sys.flags.warn_default_encoding sozlamasi qo‘shildi va “encoding=»utf-8″” opsiyasini aniq ko‘rsatmasdan UTF-8 kodlangan fayllarni open() qayta ishlash (sukut bo‘yicha ASCII kodlash qo‘llaniladi). Yangi versiya, shuningdek, joriy til asosida kodlashni o'rnatish uchun "encoding="locale" qiymatini belgilash imkoniyatini beradi.
  • Matnni yozish moduliga yangi operator qo'shildi, bu sizga “X | Turlardan birini tanlash uchun Y" tugmasini bosing (X turi yoki Y turi). def kvadrat(raqam: int | float) -> int | float: qaytish raqami ** 2 avval qo'llab-quvvatlangan konstruktsiyaga ekvivalent: def square(raqam: Union[int, float]) -> Union[int, float]: qaytish raqami ** 2
  • Yozuv moduliga Concatenate operatori va ParamSpec o'zgaruvchisi qo'shildi, bu sizga Callable-dan foydalanganda statik turni tekshirish uchun qo'shimcha ma'lumotlarni uzatish imkonini beradi. Yozish moduli, shuningdek, turdagi himoya funktsiyalariga izoh berish uchun maxsus TypeGuard qiymatlarini va turdagi taxallusni aniq belgilash uchun TypeAlias-ni qo'shadi. StrCache: TypeAlias ​​= 'Kesh[str]' # turdagi taxallus
  • zip() funktsiyasi ixtiyoriy “qattiq” bayroqni qo'llaydi, u ko'rsatilganda, takrorlanadigan argumentlar bir xil uzunlikda yoki yo'qligini tekshiradi. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(diapazon(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (eng oxirgi qo‘ng‘iroq) ): … ValueError: zip() argument 2 1-argumentdan uzunroq
  • Iter() va next() funksiyalariga asinxron analoglarni amalga oshirish bilan yangi o'rnatilgan aiter() va anext() funksiyalari taklif etiladi.
  • Kichik ob'ektlar bilan ishlashda str(), bytes() va bytearray() konstruktorlarining ishi 30-40% ga tezlashdi.
  • Runpy modulidagi import operatsiyalari soni kamaydi. “python3 -m module_name” buyrug‘i import qilingan modullar soni 1.4 tadan 69 tagacha qisqarishi hisobiga endi o‘rtacha 51 barobar tezroq ishlaydi.
  • LOAD_ATTR ko'rsatmasi individual opkodlar uchun keshlash mexanizmidan foydalanadi, bu oddiy atributlar bilan ishlashni 36% gacha va slotlar bilan 44% gacha tezlashtirishga imkon berdi.
  • Python-ni “--enable-optimizations” opsiyasi bilan qurishda endi “-fno-semantic-interposition” rejimi yoqilgan, bu “--enable-shared” bilan qurishga nisbatan tarjimonni 30% gacha tezlashtirish imkonini beradi. ” opsiyasi.
  • Hashlib va ​​ssl modullari OpenSSL 3.0.0 ni qo‘llab-quvvatladi va 1.1.1 dan eski OpenSSL versiyalarini qo‘llab-quvvatlashni to‘xtatdi.
  • Oldingi filialda PEG (Parsing Expression Grammar) tahlilchisi bilan almashtirilgan eski tahlilchi olib tashlandi. Formatlashtiruvchi modul olib tashlandi. Loop parametri asyncio API dan olib tashlandi. Ilgari eskirgan usullar olib tashlandi. Py_UNICODE* satrlarini boshqaradigan Py_UNICODE_str* funksiyalari olib tashlandi.
  • Distutils moduli eskirgan va Python 3.12 da olib tashlanishi rejalashtirilgan. Distutils o'rniga setuptools, packaging, platforma, shutil, subprocess va sysconfig modullaridan foydalanish tavsiya etiladi. PyUnicodeObject-dagi wstr tuzilmasi eskirgan va olib tashlash rejalashtirilgan.

Manba: opennet.ru

a Izoh qo'shish