Ngaleupaskeun basa programming Python 3.10

Saatos sataun pangwangunan, sékrési signifikan tina basa pamrograman Python 3.10 dibere. 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.11 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.11 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.10 ngawengku:

  • Dilaksanakeun "cocok" jeung "kasus" operator pikeun cocog pola, nu ngaronjatkeun readability kode, simplify cocog objék Python sawenang, sarta ngaronjatkeun reliabiliti kode ngaliwatan mariksa tipe statik canggih. Palaksanaanna sami sareng operator "cocok" anu disayogikeun dina Scala, Rust, sareng F #, anu ngabandingkeun hasil éksprési anu ditangtukeun sareng daptar pola anu didaptarkeun dina blok dumasar kana operator "kasus".

    def http_error (status): status cocok: kasus 400: balik "Paménta goréng" kasus 401|403|404: balik "Teu diwenangkeun" kasus 418: balik "Kuring teapot" bisi _: balik "Hal sejenna"

    Anjeun tiasa ngabongkar obyék, tuple, daptar, sareng sekuen sawenang-wenang pikeun ngabeungkeut variabel dumasar kana nilai anu aya. Diidinan pikeun ngartikeun témplat nested, nganggo tambahan "upami" kaayaan dina citakan, nganggo masker ("[x, y, *rest]"), pemetaan konci / nilai (contona, {"bandwidth": b, "latency ”: l} pikeun nimba nilai "bandwidth" sareng "latency" tina kamus), ekstrak subtemplates (":=" operator), nganggo konstanta anu dingaranan dina citakan. Dina kelas, kasebut nyaéta dimungkinkeun pikeun ngaluyukeun kabiasaan cocog ngagunakeun métode "__match__()".

    ti dataclasses impor dataclass @dataclass kelas Point: x: int y: int def whereis (titik): titik cocok: kasus Point (0, 0): print ("Asal") kasus Point (0, y): print (f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Tempat sejenna") case _: print("Not a point") cocok titik: titik titik (x, y) lamun x == y: print (f "Y = X dina {x}") titik titik (x, y): print (f "Henteu dina diagonal") BEUREUM, Héjo, BIRU = 0, 1, 2 warna cocog: kotak BEUREUM: print ("Kuring ningali beureum!") kotak Héjo: print ("Jukut héjo") kotak BIRU: print ("Kuring ngarasa blues :(")

  • Ayeuna anjeun tiasa nganggo tanda kurung dina pernyataan kalayan ngabagi definisi kumpulan manajer kontéks dina sababaraha garis. Ogé diwenangkeun ninggalkeun koma sanggeus manajer konteks final dina grup: kalawan ( CtxManager1 () salaku conto1, CtxManager2 () salaku conto2, CtxManager3 () salaku conto3, ): ...
  • Ningkatkeun ngalaporkeun ngeunaan lokasi kode kasalahan patali braces unclosed sarta tanda petik dina string literals. Contona, nalika aya hiji pananggeuy unclosed, tinimbang ngalaporkeun kasalahan sintaksis dina ngawangun handap, pointer ayeuna highlights pananggeuy lawang jeung nunjukkeun yén euweuh blok nutup. File "example.py", baris 1 ekspektasi = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ieu pernah ditutup

    Ditambahkeun pesen kasalahan sintaksis khusus tambahan: leungit ":" simbol sateuacan blok sareng dina kamus, henteu misahkeun tuple sareng kurung, leungit koma dina daptar, netepkeun blok "coba" tanpa "iwal" sareng "tungtungna", nganggo "= " tinimbang "= =" dina babandingan, nangtukeun *-ekspresi dina f-strings. Sajaba ti éta, ensures yén sakabéh éksprési masalah disorot, teu ngan awal, sarta informasi leuwih eksplisit ngeunaan konteks kasalahan pakait sareng indentation salah. >>> def foo(): ... lamun lel: ... x = 2 File " ", baris 3 x = 2 ^ IndentationError: diperkirakeun mangrupa blok indented sanggeus pernyataan 'lamun' dina baris 2

    Dina kasalahan anu disababkeun ku typos dina nami atribut sareng nami variabel dina fungsi, rekomendasi kalayan nami anu leres mangrupikeun kaluaran. >>>collections.namedtoplo Traceback (pang anyarna panggero panungtungan): File « ", baris 1, di AttributeError: modul 'koleksi' teu boga atribut 'namedtoplo'. Naha anjeun hartosna: nametuple?

  • Pikeun parabot debugging na profilers, acara renik disadiakeun kalawan nomer garis pasti kode dieksekusi.
  • Ditambahkeun setelan sys.flags.warn_default_encoding pikeun nembongkeun peringatan ngeunaan kasalahan poténsial pakait sareng TextIOWrapper tur muka () ngolah file UTF-8 disandikeun tanpa sacara eksplisit nangtukeun pilihan 'encoding=»utf-8″' (ASCII encoding dipaké sacara standar) . Rilis anyar ogé nyadiakeun kamampuhan pikeun nangtukeun hiji nilai 'encoding="locale"' pikeun nyetel encoding dumasar kana Lokalisasi ayeuna.
  • A operator anyar geus ditambahkeun kana modul ketikan, nu nyadiakeun parabot pikeun nangtukeun jenis annotations, ngamungkinkeun pamakéan sintaksis "X | Y" pikeun milih salah sahiji jenis (tipe X atawa tipe Y). def kuadrat (jumlah: int | ngambang) -> int | ngambang: angka balik ** 2 sarua jeung ngawangun saméméhna dirojong: def kuadrat (angka: Union [int, ngambang]) -> Union [int, ngambang]: angka balik ** 2
  • Operator Concatenate jeung variabel ParamSpec geus ditambahkeun kana modul ketikan, nu ngidinan Anjeun pikeun ngalirkeun informasi tambahan pikeun mariksa tipe statik lamun maké Callable. Modul ketikan ogé nambihan nilai khusus TypeGuard pikeun ngémutan fungsi perlindungan jinis sareng TypeAlias ​​pikeun sacara eksplisit nangtukeun jinis alias. StrCache: TypeAlias ​​​​= 'Cache[str]' # tipe alias
  • The zip () fungsi implements hiji pilihan "ketat" bandéra, nu, lamun dieusian, pariksa naha argumen keur iterated panjangna sarua. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=Leres)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(rentang(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (pang anyarna panggero panungtungan ): … ValueError: zip() argumen 2 leuwih panjang batan argumen 1
  • Anyar diwangun-di fungsi aiter () sarta anext () diusulkeun kalawan palaksanaan analogs Asynchronous kana fungsi iter () sarta salajengna ().
  • Karya str (), bait () sarta bytearray () konstruktor nalika gawé bareng objék leutik geus gancangan ku 30-40%.
  • Ngurangan jumlah operasi impor dina modul runpy. Paréntah "python3 -m module_name" ayeuna dijalankeun rata-rata 1.4 kali langkung gancang kusabab pangurangan modul anu diimpor tina 69 ka 51.
  • Instruksi LOAD_ATTR ngagunakeun mékanisme cache pikeun opcodes individu, nu ngamungkinkeun pikeun nyepetkeun karya kalawan atribut biasa nepi ka 36%, sarta kalawan liang nepi ka 44%.
  • Nalika ngawangun Python nganggo pilihan "--enable-optimizations", mode "-fno-semantic-interposition" ayeuna diaktipkeun, anu ngamungkinkeun nyepetkeun juru basa dugi ka 30% dibandingkeun sareng ngawangun sareng "--enable-shared. "pilihan.
  • Modul hashlib sareng ssl parantos nambihan dukungan pikeun OpenSSL 3.0.0 sareng ngeureunkeun ngadukung vérsi OpenSSL langkung lami ti 1.1.1.
  • Parser heubeul geus dihapus, nu diganti dina cabang saméméhna ku parser PEG (Parsing Expression Grammar). Modul formatter geus dihapus. Parameter loop geus dihapus tina asyncio API. Métode nu saméméhna deprecated geus dihapus. Py_UNICODE_str* fungsi nu ngamanipulasi Py_UNICODE* string geus dihapus.
  • modul distutils geus deprecated sarta dijadwalkeun pikeun nyoplokkeun dina Python 3.12. Gantina distutils, eta disarankeun pikeun ngagunakeun setuptools, bungkusan, platform, shutil, subprocess na sysconfig modul. Struktur wstr di PyUnicodeObject parantos dicabut sareng dijadwalkeun pikeun dipupus.

sumber: opennet.ru

Tambahkeun komentar