Rilis basa pamrograman Python 3.10

Sawise setahun pembangunan, release pinunjul saka Python 3.10 basa program presented. 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.11 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.11 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.10 kalebu:

  • Dileksanakake "cocog" lan "kasus" operator kanggo pola cocog, kang nambah kode readability, menakake cocog obyek Python kasepakatan, lan nambah linuwih kode liwat majeng jinis statis mriksa. Implementasine kaya operator "cocok" sing kasedhiya ing Scala, Rust, lan F #, sing mbandhingake asil ekspresi sing ditemtokake karo dhaptar pola sing didaftar ing blok adhedhasar operator "kasus".

    def http_error(status): status match: kasus 400: bali "Panjaluk ala" kasus 401|403|404: bali "Ora diijini" kasus 418: bali "Aku teko" kasus _: bali "Soko liya"

    Sampeyan bisa mbongkar obyek, tuple, dhaptar, lan urutan sewenang-wenang kanggo ngiket variabel adhedhasar nilai sing ana. Diijini kanggo nemtokake cithakan nested, nggunakake tambahan "yen" kahanan ing cithakan, nggunakake topeng ("[x, y, *rest]"), kunci / pemetaan nilai (contone, {"bandwidth": b, "latensi ”: l} kanggo ngekstrak nilai "bandwidth" lan "latency" saka kamus), ekstrak subtemplates (":=" operator), gunakake konstanta sing dijenengi ing cithakan. Ing kelas, iku bisa kanggo ngatur prilaku cocog nggunakake "__match__()" cara.

    saka dataclasses ngimpor dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Asal") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Ora titik") cocok titik: cilik Titik(x, y) yen x == y: print(f"Y=X ing {x}") huruf cilik Titik(x,y): print(f"Ora ing diagonal") RED, Ijo, BIRU = 0, 1, 2 warna sing cocog: kasus RED: print(β€œAku ndeleng abang!”) kasus Ijo: print(β€œSuket ijo”) kasus BIRU: print(β€œAku ngrasakake blues :(β€œ)

  • Saiki sampeyan bisa nggunakake tanda kurung ing statement kanggo pamisah definisi koleksi manajer konteks ing pirang-pirang baris. Sampeyan uga diijini ninggalake koma sawise manajer konteks pungkasan ing grup: karo ( CtxManager1 () minangka conto1, CtxManager2 () minangka conto2, CtxManager3 () minangka conto3, ): ...
  • Pelaporan sing luwih apik babagan lokasi kode kesalahan sing ana gandhengane karo braces lan kuotasi sing ora ditutup ing literal string. Contone, nalika ana brace sing ora ditutup, tinimbang nglaporake kesalahan sintaks ing konstruksi ing ngisor iki, pointer saiki nyorot brace pambuka lan nuduhake yen ora ana blok penutup. Berkas "example.py", baris 1 samesthine = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ora tau ditutup

    Nambahake pesen kesalahan sintaksis khusus tambahan: ora ana simbol ":" sadurunge blok lan ing kamus, ora misahake tuple nganggo tanda kurung, ora ana koma ing dhaptar, nemtokake blok "coba" tanpa "kajaba" lan "pungkasan", nggunakake "= " tinimbang "=" ing bandingaken, nemtokake *-ekspresi ing f-strings. Kajaba iku, njamin yen kabeh ekspresi masalah disorot, ora mung wiwitan, lan informasi sing luwih jelas babagan konteks kesalahan sing ana gandhengane karo indentasi sing salah. >>> def foo(): ... yen lel: ... x = 2 File " ", baris 3 x = 2 ^ IndentationError: samesthine blok indent sawise statement 'yen' ing baris 2

    Ing kesalahan sing disebabake kesalahan ketik ing jeneng atribut lan jeneng variabel ing sawijining fungsi, rekomendasi kanthi jeneng sing bener bakal metu. >>>collections.namedtoplo Traceback (telpon paling anyar pungkasan): File Β« ", baris 1, ing AttributeError: modul 'koleksi' ora duwe atribut 'namedtoplo'. Apa tegese: nametuple?

  • Kanggo alat debugging lan profiler, acara trace diwenehake kanthi nomer baris sing tepat saka kode sing dieksekusi.
  • Nambahake setelan sys.flags.warn_default_encoding kanggo nampilake bebaya babagan kesalahan potensial sing ana gandhengane karo TextIOWrapper lan mbukak () ngolah file sing dienkode UTF-8 tanpa kanthi jelas nemtokake pilihan 'encoding=Β»utf-8β€³' (enkoding ASCII digunakake minangka standar) . Rilis anyar uga menehi kemampuan kanggo nemtokake nilai 'encoding="locale"' kanggo nyetel enkoding adhedhasar lokal saiki.
  • Operator anyar wis ditambahake menyang modul ngetik, sing nyedhiyakake alat kanggo nemtokake anotasi jinis, ngidini panggunaan sintaks "X | Y" kanggo milih salah siji jinis (jinis X utawa jinis Y). def square(nomer: int | float) -> int | float: nomer bali ** 2 padha karo konstruksi sing didhukung sadurunge: def square (nomer: Union [int, float]) -> Union [int, float]: nomer bali ** 2
  • Operator Concatenate lan variabel ParamSpec wis ditambahake menyang modul ngetik, sing ngidini sampeyan ngirim informasi tambahan kanggo mriksa jinis statis nalika nggunakake Callable. Modul ngetik uga nambahake nilai khusus TypeGuard kanggo menehi anotasi fungsi proteksi jinis lan TypeAlias ​​kanggo nemtokake alias jinis kanthi eksplisit. StrCache: TypeAlias ​​​​= 'Cache[str]' # alias tipe
  • Fungsi zip () ngleksanakake gendera "ketat" opsional, sing, nalika ditemtokake, mriksa apa argumen sing diulang dawane padha. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (telpon paling anyar pungkasan ): … ValueError: zip() argumen 2 luwih dawa tinimbang argumen 1
  • New dibangun ing fungsi aiter () lan anext () ngajokaken karo implementasine saka analog bedo kanggo fungsi iter () lan sabanjurΓ© ().
  • Karya konstruktor str (), byte () lan bytearray () nalika nggarap obyek cilik wis digawe cepet dening 30-40%.
  • Ngurangi jumlah operasi impor ing modul runpy. Printah "python3 -m module_name" saiki mlaku rata-rata 1.4 kaping luwih cepet amarga ngurangi modul sing diimpor saka 69 dadi 51.
  • Instruksi LOAD_ATTR nggunakake mekanisme caching kanggo opcodes individu, kang digawe iku bisa kanggo nyepetake karya karo atribut biasa nganti 36%, lan karo slot nganti 44%.
  • Nalika mbangun Python kanthi opsi "--enable-optimizations", mode "-fno-semantic-interposition" saiki diaktifake, sing ngidini nyepetake interpreter nganti 30% dibandhingake karo mbangun karo "--enable-shared. "pilihan.
  • Modul hashlib lan ssl wis nambahake dhukungan kanggo OpenSSL 3.0.0 lan mandheg ndhukung versi OpenSSL sing luwih lawas tinimbang 1.1.1.
  • Parser lawas wis dibusak, sing diganti ing cabang sadurunge dening parser PEG (Parsing Expression Grammar). Modul formatter wis dibusak. Parameter loop wis dibusak saka asyncio API. Metode sing sadurunge ora digunakake wis dibusak. Fungsi Py_UNICODE_str* sing manipulasi string Py_UNICODE* wis dibusak.
  • Modul distutils wis ora digunakake lan dijadwalake dibusak ing Python 3.12. Tinimbang distutils, dianjurake kanggo nggunakake setuptools, packaging, platform, shutil, subprocess lan sysconfig modul. Struktur wstr ing PyUnicodeObject wis ora digunakake lan dijadwal kanggo dibusak.

Source: opennet.ru

Add a comment