Rilis basa pamrograman Python 3.11

Sawise setahun pembangunan, release pinunjul saka Python 3.11 basa program wis diterbitake. Cabang anyar bakal didhukung sajrone siji setengah taun, sawise telung setengah taun maneh, perbaikan bakal digawe kanggo ngilangi kerentanan.

Ing wektu sing padha, tes alpha saka cabang Python 3.12 diwiwiti (sesuai karo jadwal pangembangan anyar, nggarap cabang anyar diwiwiti limang wulan sadurunge rilis cabang sadurunge lan tekan tahap tes alpha nalika rilis sabanjure. ). Cabang Python 3.12 bakal diluncurake alpha suwene pitung sasi, sajrone fitur-fitur anyar bakal ditambah lan bug didandani. Sawise iki, versi beta bakal dites suwene telung sasi, sajrone nambahake fitur anyar bakal dilarang lan kabeh perhatian bakal dibayar kanggo ndandani bug. Kanggo rong sasi pungkasan sadurunge rilis, cabang kasebut bakal ana ing tahap calon rilis, ing ngendi stabilisasi pungkasan bakal ditindakake.

Tambahan anyar kanggo Python 3.11 kalebu:

  • Karya penting wis ditindakake kanggo ngoptimalake kinerja. Cabang anyar kalebu owah-owahan sing ana gandhengane karo percepatan lan panyebaran inline saka panggilan fungsi, panggunaan interpreter cepet saka operasi standar (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), uga optimasi sing disiapake dening proyek Cinder lan HotPy. Gumantung saka jinis beban, ana paningkatan kacepetan eksekusi kode 10-60%. Rata-rata, kinerja ing suite tes pyperformance mundhak 25%.

    Mekanisme caching bytecode wis didesain ulang, sing nyuda wektu wiwitan interpreter kanthi 10-15%. Obyek karo kode lan bytecode saiki statis diparengake dening interpreter, kang ndadekake iku bisa kanggo ngilangke orane tumrap sekolah saka unmarshalling bytecode dijupuk saka cache lan Ngonversi obyek karo kode kanggo diselehake ing memori dinamis.

  • Nalika nampilake jejak telpon ing pesen diagnostik, saiki bisa nampilake informasi babagan ekspresi sing nyebabake kesalahan (sadurunge, mung baris sing disorot tanpa njlentrehake bagean saka baris sing nyebabake kesalahan). Informasi tilak lengkap uga bisa dipikolehi liwat API lan digunakake kanggo map instruksi bytecode individu kanggo posisi tartamtu ing kode sumber nggunakake cara codeobject.co_positions () utawa fungsi C API PyCode_Addr2Location (). Owah-owahan kasebut ndadekake luwih gampang kanggo debug masalah karo obyek kamus bersarang, macem-macem panggilan fungsi, lan ekspresi aritmetika kompleks. Traceback (telpon paling anyar pungkasan): File "calculation.py", baris 54, ing asil = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: divisi dening nol
  • Dhukungan tambahan kanggo klompok pangecualian, menehi program kemampuan kanggo ngasilake lan ngolah sawetara pangecualian sing beda bebarengan. Kanggo nglumpukake macem-macem pangecualian lan nambahake bebarengan, jinis pangecualian anyar ExceptionGroup lan BaseExceptionGroup wis diusulake, lan ekspresi "kajaba *" wis ditambahake kanggo nyorot pengecualian individu saka grup.
  • Add_note () cara wis ditambahake ing kelas BaseException, ngijini sampeyan kanggo masang cathetan teks kanggo pangecualian, Contone, nambah informasi kontekstual sing ora kasedhiya nalika pangecualian dibuwang.
  • Nambahake jinis Self khusus kanggo makili kelas pribadi saiki. Self bisa digunakake kanggo anotasi cara sing ngasilake conto kelas kanthi cara sing luwih gampang tinimbang nggunakake TypeVar. kelas MyLock: def __enter__(self) -> Self: self.lock () bali dhewe
  • Nambahake jinis LiteralString khusus sing mung bisa nyakup literal string sing kompatibel karo jinis LiteralString (yaiku, senar kosong lan LiteralString, nanging ora sewenang-wenang utawa senar str gabungan). Jinis LiteralString bisa digunakake kanggo mbatesi passing argumentasi string menyang fungsi, substitusi sewenang-wenang saka bagean strings kang bisa mimpin kanggo vulnerabilities, contone, nalika ngasilaken strings kanggo SQL query utawa shell printah. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("PILIH * FROM siswa") # ok run_query(literal_string) # ok run_query("SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Error run_query(# Error f"SELECT * FROM students WHERE name = {arbitrary_string}")
  • Jinis TypeVarTuple wis ditambahake, ngidini panggunaan generik variabel, ora kaya TypeVar, sing ora kalebu siji jinis, nanging jumlah jinis sing kawenang-wenang.
  • Pustaka standar kalebu modul tomllib kanthi fungsi kanggo parsing format TOML.
  • Sampeyan bisa menehi tandha unsur individu saka kamus sing diketik (TypedDict) kanthi label Required lan NotRequired kanggo nemtokake kolom sing dibutuhake lan opsional (kanthi standar, kabeh kolom sing diumumake dibutuhake yen parameter total ora disetel menyang Palsu). kelas Film(TypedDict): judhul: str taun: Ora Dibutuhake[int] m1: Film = {"judhul": "Black Panther", "taun": 2018} # OK m2: Film = {"judul": "Star Wars" } # OK (kolom taun opsional) m3: Film = {"taun": 2022} # Kesalahan, kolom judhul sing dibutuhake ora diisi)
  • Kelas TaskGroup wis ditambahake menyang modul asyncio kanthi implementasi manajer konteks bedo sing ngenteni klompok tugas rampung. Nambahake tugas menyang grup wis rampung nggunakake cara create_task (). async def main(): async karo asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Loro tugas wis rampung saiki .")
  • Added @dataclass_transform decorator kanggo kelas, cara lan fungsi, nalika kasebut, sistem mriksa jinis statis nambani obyek kaya nggunakake @dataclasses.dataclass decorator. Ing conto ing ngisor iki, kelas CustomerModel, nalika mriksa jinis, bakal diproses padha karo kelas karo @dataclasses.dataclass decorator, i.e. minangka duwe metode __init__ sing nampa id lan jeneng variabel. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • Ing ekspresi reguler, kemampuan kanggo nggunakake pengelompokan atom ((?>...)) lan quantifiers possessive (*+, ++, ?+, {m,n}+) wis ditambahake.
  • Added "-P" pilihan baris printah lan variabel lingkungan PYTHONSAFEPATH kanggo mateni lampiran otomatis path file potensial aman kanggo sys.path.
  • Utilitas py.exe kanggo platform Windows wis apik banget, nambah dhukungan kanggo sintaks "-V:". / "Saliyane" - . "
  • Akeh makro ing C API diowahi dadi fungsi inline biasa utawa statis.
  • Modul uu, cgi, pipa, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, lan sunau wis ora digunakake lan bakal dibusak ing Python. 3.13 release. Dibusak fungsi PyUnicode_Encode*.

Source: opennet.ru

Add a comment