Ngaleupaskeun basa programming Python 3.11

Saatos sataun pangwangunan, sékrési signifikan tina basa pamrograman Python 3.11 parantos diterbitkeun. Cabang anyar bakal dirojong salami hiji satengah taun, saatosna salami tilu satengah taun deui, perbaikan bakal dilakukeun pikeun ngaleungitkeun kerentanan.

Dina waktos anu sami, uji alfa cabang Python 3.12 dimimitian (luyu sareng jadwal pangembangan énggal, damel di cabang énggal dimimitian lima bulan sateuacan sékrési cabang sateuacana sareng ngahontal tahap uji alfa dina waktos pelepasan salajengna. ). Cabang Python 3.12 bakal dileupaskeun alfa salami tujuh bulan, dimana fitur-fitur anyar bakal ditambah sareng bug dibenerkeun. Sanggeus ieu, versi béta bakal diuji salila tilu bulan, salila nambahkeun fitur anyar bakal dilarang sarta sakabeh perhatian bakal dibayar ka ngalereskeun bug. Pikeun dua bulan terakhir sateuacan rilis, cabang bakal aya dina tahap calon pelepasan, dimana stabilisasi akhir bakal dilaksanakeun.

Tambahan anyar pikeun Python 3.11 ngawengku:

  • Karya anu penting parantos dilakukeun pikeun ngaoptimalkeun kinerja. Cabang anyar kalebet parobihan anu aya hubunganana sareng akselerasi sareng panyebaran inline telepon fungsi, panggunaan juru gancang operasi standar (x+x, x*x, xx, a[i], a[i] = z, f(arg) C (arg), o.method(), o.attr = z, *seq), kitu ogé optimizations disiapkeun ku proyék Cinder na HotPy. Gumantung kana jinis beban, aya paningkatan dina laju palaksanaan kode 10-60%. Rata-rata, kinerja dina pyperformance test suite ngaronjat ku 25%.

    Mékanisme cache bytecode parantos didesain deui, anu ngirangan waktos ngamimitian juru ku 10-15%. Objék kalayan kode sareng bytecode ayeuna dialokasikeun sacara statik ku juru, anu ngamungkinkeun pikeun ngaleungitkeun tahapan unmarshalling bytecode sasari tina cache sareng ngarobih objék nganggo kode pikeun disimpen dina mémori dinamis.

  • Nalika ningalikeun jejak telepon dina pesen diagnostik, ayeuna tiasa ningalikeun inpormasi ngeunaan ekspresi anu nyababkeun kasalahan (saméméhna, ngan ukur garis anu disorot tanpa detil bagian mana anu nyababkeun kasalahan). Inpo ngambah ngalegaan ogé bisa didapet ngaliwatan API tur dipaké pikeun peta parentah bytecode individu ka posisi husus dina kode sumber ngagunakeun métode codeobject.co_positions () atawa fungsi C API PyCode_Addr2Location (). Parobihan éta ngagampangkeun pikeun nga-debug masalah sareng objék kamus bersarang, sababaraha sauran fungsi, sareng éksprési aritmatika kompleks. Traceback (pang anyarna panggero panungtungan): File "calculation.py", baris 54, dina hasil = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division ku nol
  • Ditambahkeun rojongan pikeun grup iwal, mere program kamampuhan pikeun ngahasilkeun sarta ngolah sababaraha iwal béda sakaligus. Pikeun ngagolongkeun sababaraha iwal jeung ngangkat aranjeunna babarengan, tipe iwal anyar ExceptionGroup na BaseExceptionGroup geus diajukeun, sarta "iwal *" ekspresi geus ditambahkeun pikeun nyorot iwal individu ti grup.
  • Metodeu add_note () geus ditambahkeun kana kelas BaseException, ngidinan Anjeun pikeun ngagantelkeun catetan téks iwal, Contona, nambahkeun inpo kontekstual nu teu sadia nalika iwal dialungkeun.
  • Ditambahkeun tipe Self husus pikeun ngagambarkeun kelas swasta ayeuna. Self bisa dipaké pikeun annotate métode nu balik hiji conto kelas na dina cara basajan ti ngagunakeun TypeVar. kelas MyLock: def __enter__ (diri) -> Self: self.lock () balik diri
  • Nambahkeun tipe LiteralString husus nu ngan bisa ngawengku string literals anu cocog sareng tipe LiteralString (nyaéta, string bulistir jeung string tipe LiteralString, tapi teu wenang atawa digabungkeun string tipe str). Tipe LiteralString bisa dipaké pikeun ngawatesan ngalirkeun argumen string kana fungsi, substitusi sawenang bagian string nu bisa ngakibatkeun kerentanan, contona, nalika ngahasilkeun string pikeun queries SQL atawa paréntah cangkang. def run_query (sql: LiteralString) -> ... ... def panelepon (arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Euweuh: run_query ("PILIH * TI murid") # ok run_query (literal_string) # ok run_query( "PILIH * FROM " + literal_string) # ok run_query (arbitrary_string) # Kasalahan run_query ( # Kasalahan f "PILIH * TI murid WHERE ngaran = {arbitrary_string}")
  • Tipe TypeVarTuple geus ditambahkeun, sahingga pamakéan generics variabel, teu kawas TypeVar, nu nutupan teu salah sahiji jenis, tapi jumlah arbitrary tipe.
  • Perpustakaan baku ngawengku modul tomllib kalawan fungsi pikeun parsing format TOML.
  • Kasebut nyaéta dimungkinkeun pikeun nyirian elemen individu tina kamus diketik (TypedDict) kalawan Required jeung NotRequired labél pikeun nangtukeun diperlukeun tur widang pilihan (sacara standar, sadaya widang dinyatakeun diperlukeun lamun parameter total teu disetel ka Palsu). kelas Pilem (TypedDict): judul: str taun: NotRequired[int] m1: Pilem = {"judul": "Hideung Panther", "taun": 2018} # OK m2: Pilem = {"judul": "Star Wars" } # OK (widang taun opsional) m3: Pilem = {"taun": 2022} # Kasalahan, widang judul anu diperlukeun teu dieusian)
  • Kelas TaskGroup geus ditambahkeun kana modul asyncio kalawan palaksanaan hiji manajer konteks Asynchronous nu waits pikeun grup tugas réngsé. Nambahkeun tugas ka grup dipigawé maké create_task () métode. async def main (): async kalawan asyncio.TaskGroup () sakumaha tg: task1 = tg.create_task (some_coro (...)) task2 = tg.create_task (another_coro (...)) print ("Dua tugas geus réngsé ayeuna .")
  • Ditambahkeun @dataclass_transform decorator pikeun kelas, métode jeung fungsi, lamun dieusian, Sistim mariksa tipe statik Ngaruwat objék saolah-olah ngagunakeun @dataclasses.dataclass decorator. Dina conto di handap, kelas CustomerModel, nalika mariksa jenis, bakal diolah sarua jeung kelas kalawan @dataclasses.dataclass decorator, i.e. sakumaha ngabogaan metoda __init__ nu narima id jeung ngaran variabel. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Dina éksprési biasa, kamampuh ngagunakeun gugus atom ((?>...)) jeung quantifiers possessive (*+, ++, ?+, {m,n}+) geus ditambahkeun.
  • Ditambahkeun "-P" pilihan garis paréntah sarta variabel lingkungan PYTHONSAFEPATH pikeun nganonaktipkeun kantétan otomatis tina jalur file berpotensi unsafe mun sys.path.
  • Utilitas py.exe pikeun platform Windows parantos ningkat sacara signifikan, nambihan dukungan pikeun sintaksis "-V:". / " sareng deuih "- . "
  • Loba makro dina C API dirobah jadi fungsi inline biasa atawa statik.
  • U, cgi, pipa, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, sareng modul sunau parantos dileungitkeun sareng bakal dihapus dina Python. 3.13 ngabebaskeun. Dipiceun PyUnicode_Encode * fungsi.

sumber: opennet.ru

Tambahkeun komentar