Liberasyon langaj pwogramasyon Python 3.8

Apre yon ane ak yon mwatye nan devlopman prezante pi gwo langaj pwogramasyon Piton 3.8. Mizajou korektif pou branch Python 3.8 planifye lage nan 18 mwa. Frajilite kritik yo pral fiks pou 5 ane jiska oktòb 2024. Mizajou korektif pou branch 3.8 la pral lage chak de mwa, ak premye lage korektif Python 3.8.1 pwograme pou Desanm.

Pami yo te ajoute inovasyon:

  • Sipòte operasyon plasman nan ekspresyon konplèks. Avèk nouvo operatè ":=", li posib pou fè operasyon pou bay valè andedan lòt ekspresyon, pou egzanp, pou evite apèl fonksyon doub nan deklarasyon kondisyonèl ak lè defini bouk:

    si (n := len(a)) > 10:
    ...

    while (blòk := f.read(256)) != ":
    ...

  • Sipòte nouvo sentaks pou espesifye agiman fonksyon. Lè w enimere agiman pandan yon definisyon fonksyon, kounye a ou ka presize yon "/" pou separe agiman ki ka sèlman asiyen valè ki baze sou lòd nan ki valè yo enimere pandan apèl fonksyon an, soti nan agiman ki ka asiyen. nan nenpòt lòd (varyab = sentaks valè)). Sou bò pratik, karakteristik nan nouvo pèmèt fonksyon nan Python konplètman imite konpòtman an nan fonksyon ki deja egziste nan C, epi tou pou evite obligatwa nan non espesifik, pou egzanp, si non an paramèt te planifye yo dwe chanje nan lavni an.

    Drapo "/" konplete drapo "*" ki te ajoute anvan an, separe varyab pou yo sèlman yon devwa nan fòm "variable=valè" aplikab. Pou egzanp, nan fonksyon "def f(a, b, /, c, d, *, e, f):" varyab yo "a" ak "b" ka sèlman asiyen nan lòd valè yo ki nan lis la. ,
    varyab "e" ak "f", sèlman atravè plasman "varyab = valè", ak varyab "c" ak "d" nan nenpòt nan fason sa yo:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Te ajoute nouvo C API
    konfigirasyon paramèt inisyalizasyon Python, sa ki pèmèt kontwòl konplè sou tout konfigirasyon epi bay enstalasyon avanse pou manyen erè. API pwopoze a fè li fasil pou entegre fonksyonalite entèprèt Python nan lòt aplikasyon C;

  • Aplike Nouvo pwotokòl Vectorcall pou aksè pi rapid nan objè ki ekri nan lang C. Nan CPython 3.8, aksè a Vectorcall toujou limite a itilizasyon entèn; transfè nan kategori API aksesib piblik la planifye nan CPython 3.9;
  • Te ajoute apèl nan Runtime Audit Hooks, ki bay aplikasyon ak kad nan Python ak aksè a enfòmasyon ki ba-nivo sou pwogrè nan script la fè odit aksyon yo fèt (pa egzanp, ou ka swiv enpòte a nan modil, louvri dosye, lè l sèvi avèk yon tras, aksè nan priz rezo, kouri kòd atravè exec, eval ak run_mod);
  • Nan modil la marinated bay sipò pou pwotokòl la Pickle 5, yo itilize pou seri ak deserialize objè yo. Pickle pèmèt ou optimize transfè gwo kantite done ant pwosesis Python nan konfigirasyon milti-nwayo ak milti-nœud lè w diminye kantite operasyon kopi memwa epi aplike teknik optimize adisyonèl tankou lè l sèvi avèk algoritm konpresyon done espesifik. Vèsyon an senkyèm nan pwotokòl la se remakab pou adisyon a nan yon mòd transmisyon andeyò band, nan ki done yo ka transmèt separeman nan kouran prensipal la pickle.
  • Pa default, katriyèm vèsyon pwotokòl la Pickle aktive, ki, konpare ak twazyèm vèsyon an deja ofri pa default, pèmèt pou pi wo pèfòmans ak yon rediksyon nan gwosè a nan done transmèt;
  • Nan modil la sezisman Plizyè nouvo karakteristik yo prezante:
    • Gwoup TypedDict pou etalaj asosyatif kote enfòmasyon kalite yo espesifye klèman pou done ki asosye ak kle yo ("TypedDict('Point2D', x=int, y=int, label=str)").
    • Kalite Literal, ki pèmèt ou limite yon paramèt oswa retounen valè nan kèk valè predefini ("Literal ['konekte', 'dekonekte']").
    • Konstriksyon "Final", ki fè li posib yo defini valè yo nan varyab, fonksyon, metòd ak klas ki pa ka chanje oswa reassigned ("pi: Final [flote] = 3.1415926536").
  • Te ajoute kapasite nan bay yon kachèt pou fichye konpile ak bytecode, sove nan yon pye bwa FS separe ak separe de anyè yo ak kòd la. Chemen pou sove fichye ak bytecode tabli atravè yon varyab PYTHONPYCACHEPREFIX oswa opsyon "-X pycache_prefix";
  • Aplike kapasite pou kreye debug builds nan Python ki sèvi ak yon ABI ki idantik ak lage a, ki pèmèt ou chaje ekstansyon ekri nan lang SI, konpile pou degaje ki estab, nan debug bati;
  • F-strings (literal fòmate ki gen prefiks 'f') bay sipò pou operatè a = (pa egzanp, "f'{expr=}'"), ki pèmèt ou konvèti yon ekspresyon an tèks pou pi fasil debogaj. Pa egzanp:

    ››› itilizatè = 'eric_idle'
    ››› manm_depi = dat(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "utilisateur='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Ekspresyon "kontinye» yo pèmèt yo itilize andedan yon blòk finalman;
  • Nouvo modil te ajoute multiprocessing.shared_memory, ki pèmèt itilizasyon segman memwa pataje nan konfigirasyon miltipwosesis;
  • Sou platfòm Windows la, aplikasyon asyncio a te deplase pou sèvi ak klas la ProactorEventLoop;
  • Pèfòmans enstriksyon LOAD_GLOBAL la ogmante apeprè 40% akòz itilizasyon yon nouvo mekanis kachèt kòd objè.

Sous: opennet.ru

Add nouvo kòmantè