ProgrammēŔanas valodas Python 3.9 izlaiŔana

Pēc gada attÄ«stÄ«bas uzrādÄ«ts nozÄ«mÄ«gs programmÄ“Å”anas valodas izlaidums Python 3.9. Python 3.9 bija pirmais laidiens pēc tam pāreja projekts tālāk jauns cikls izlaidumu sagatavoÅ”ana un atbalsts. Jauni lielākie laidieni tagad tiks Ä£enerēti reizi gadā, un koriģējoÅ”ie atjauninājumi tiks izlaisti ik pēc diviem mēneÅ”iem. Katra nozÄ«mÄ«ga nozare tiks atbalstÄ«ta pusotru gadu, pēc tam vēl trÄ«sarpus gadi tai tiks izstrādāti ievainojamÄ«bu novērÅ”anai.

Darbs pie jaunas filiāles tagad sākas piecus mēneÅ”us pirms nākamās filiāles izlaiÅ”anas, t.i. kas sakrÄ«t ar Python 3.9 izlaiÅ”anu sākās Python 3.10 filiāles alfa testÄ“Å”ana. Python 3.10 atzars alfa versijā bÅ«s septiņus mēneÅ”us, kuru laikā tiks pievienotas jaunas funkcijas un izlabotas kļūdas. Pēc tam beta versijas tiks testētas trÄ«s mēneÅ”us, kuru laikā jaunu funkciju pievienoÅ”ana bÅ«s aizliegta un visa uzmanÄ«ba tiks pievērsta kļūdu laboÅ”anai. Pēdējos divus mēneÅ”us pirms izlaiÅ”anas filiāle bÅ«s izlaiduma kandidāta stadijā, kurā tiks veikta galÄ«gā stabilizācija.

Vidū pievienots jauninājumiem Python 3.9 versijā:

  • VārdnÄ«cās, kas definētas, izmantojot iebÅ«vēto diktÄ“Å”anas klasi, parādÄ«jās atbalsts apvienoÅ”anas operatoriem "|" un "|=" atjauninājumi, kas papildina vārdnÄ«cu apvienoÅ”anai iepriekÅ” piedāvātās metodes {**d1, **d2} un dict.update.

    >>> x = {"key1": "vērtība1 no x", "key2": "vērtība2 no x"}
    >>> y = {"key2": "vērtība2 no y", "key3": "vērtība3 no y"}

    >>> x | y
    {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}

    >>> y | x
    {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

  • IebÅ«vētajā tipu kolekcijā ir saraksts, diktāts un kortežs, ko var izmantot kā pamattipus, neimportējot no maŔīnrakstÄ«Å”anas moduļa. Tie. rakstÄ«Å”anas vietā.Saraksts, rakstÄ«Å”ana.Dikts un rakstÄ«Å”ana.Tuple tagad varat norādÄ«t
    tikai saraksts, dikts un kortežs:

    def greet_all(nosaukumi: saraksts[str]) -> Nav:
    vārdiem nosaukumos:
    drukāt ("Sveiks", vārds)

  • Tiek nodroÅ”ināti elastÄ«gi rÄ«ki funkciju un mainÄ«go anotÄ“Å”anai. Lai pievienotu anotācijas, rakstÄ«Å”anas modulim ir pievienots jauns anotācijas veids, paplaÅ”inot esoÅ”os veidus ar papildu metadatiem, ko var izmantot statiskai analÄ«zei vai izpildlaika optimizācijai. Lai piekļūtu metadatiem no koda, metodei typing.get_type_hints() ir pievienots parametrs include_extras.

    charType = Anotēts[int, ctype("char")] UnsignedShort = Anotēts[int, struct2.ctype('H')]

  • Tonizēts Gramatiskās prasÄ«bas dekoratoriem - jebkurÅ” izteiciens, kas piemērots lietoÅ”anai, ja un kamēr blokus tagad var izmantot kā dekoratoru. Izmaiņas ievērojami uzlaboja PyQt5 koda lasāmÄ«bu un vienkārÅ”oja Ŕī moduļa apkopi:

    Bija:
    button_0 = pogas[0] @button_0.clicked.connect

    Tagad jūs varat rakstīt:
    @buttons[0].clicked.connect

  • Uz standarta bibliotēku piebilda modulis zoninfo, kas ietver informāciju no IANA laika joslu datu bāzes.

    >>> no zoneinfo importēt ZoneInfo
    >>> no datetime importa datetime, timedelta
    >>> # Vasaras laiks
    >>> dt = datums un laiks(2020, 10, 31, 12, tzinfo=ZoneInfo("Amerika/Losandžela"))
    >>> drukāt (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    "PDT"

    >>> # Standarta laiks
    >>> dt += timedelta(dienas=7)
    >>> drukāt (dt)
    2020-11-07 12:00:00-08:00

    >>> drukāt(dt.tzname())
    PST

  • Pievienots graphlib modulis, kurā Ä«stenota atbalsts grafiku topoloÄ£iskai ŔķiroÅ”anai.
  • Ierosināts jaunas metodes prefiksu un rindu galotņu noņemÅ”anai - str.removeprefix(prefix) un str.removesuffix(sufikss). Str, bytes, bytearray un collections.UserString objektiem ir pievienotas metodes.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Bārs'

  • IesaistÄ«ts jauns parsētājs PEG (Parsing Expression Grammar), kas aizstāja parsētāju LL(1). Jaunā parsētāja izmantoÅ”ana ļāva atbrÄ«voties no dažiem ā€œuzlauzumiemā€, kas tika izmantoti, lai apietu LL(1) ierobežojumus, un ievērojami samazināja parsētāja uzturÄ“Å”anas darbaspēka izmaksas. Veiktspējas ziņā jaunais parsētājs ir aptuveni tādā paŔā lÄ«menÄ« kā iepriekŔējais, taču ievērojami apsteidz to elastÄ«bas ziņā, kas ļauj justies brÄ«vāk, izstrādājot jaunas valodas funkcijas. Pagaidām tiek saglabāts vecais parsētāja kods, un to var atgriezt, izmantojot karogu "-X oldparser" vai vides mainÄ«go "PYTHONOLDPARSER=1", taču tas tiks noņemts 3.10. laidumā.
  • Ar nosacÄ«jumu C paplaÅ”inājuma metožu iespēja piekļūt to moduļu stāvoklim, kuros tie ir definēti, izmantojot tieÅ”u rādÄ«tāja atsauci, nevis meklēt moduļa stāvokli, izmantojot funkciju PyState_FindModule. Izmaiņas ļauj palielināt C moduļu veiktspēju, samazinot vai pilnÄ«bā novērÅ”ot moduļa stāvokļa pārbaudes pieskaitāmās izmaksas. Lai saistÄ«tu moduli ar klasi, tiek piedāvāta C funkcija PyType_FromModuleAndSpec(), lai iegÅ«tu moduli un tā stāvokli, tiek piedāvātas C funkcijas PyType_GetModule() un PyType_GetModuleState() un nodroÅ”inātu metodi ar piekļuvi klasei. kurā tas ir definēts, tiek piedāvāta C-funkcija PyCMethod un METH_METHOD karodziņŔ.
  • Atkritumu savācējs piegādāts no kolekciju bloÄ·Ä“Å”anas, kas satur reanimētus objektus, kuri pēc pabeigtāja palaiÅ”anas paliek ārēji pieejami.
  • Pievienota metode os.pidfd_open, kas ļauj izmantot Linux kodola apakÅ”sistēmu "pidfd", lai apstrādātu PID atkārtotas izmantoÅ”anas situāciju (pidfd ir saistÄ«ts ar konkrētu procesu un nemainās, savukārt PID var tikt saistÄ«ts ar citu procesu pēc tam, kad beidzas paÅ”reizējais process, kas saistÄ«ts ar Å”o PID ).
  • Unikoda specifikācijas atbalsts ir atjaunināts uz versiju 13.0.0.
  • Likvidēts atmiņas noplÅ«de atkārtoti inicializējot Python tulku tajā paŔā procesā.
  • Ir optimizēta iebÅ«vēto tipu diapazona, korektora, kopas, iesaldētās kopas, saraksta un diktatÅ«ras veiktspēja. Ä«stenoti izmantojot Vectorcall saÄ«snes protokolu, lai ātrāk piekļūtu objektiem, kas rakstÄ«ti C valodā.
  • Moduļi _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operators, resurss, laiks un _weakref tiek ielādēti no inicializācija vairākos posmos.
  • Standarta bibliotēkas moduļi audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios un zlib ir pārveidoti, lai izmantotu ierobežotu. stabils ABI, kas atrisina paplaÅ”inājumu moduļu komplektu darbspējas problēmu dažādām Python versijām (atjauninot versiju, nav nepiecieÅ”ams pārbÅ«vēt paplaÅ”inājuma moduļus, un 3.9 filiālē varēs strādāt moduļi, kas sastādÄ«ti 3.10).
  • Asyncio modulim ir novecojis parametra reuse_address atbalsts iespējamo droŔības problēmu dēļ (izmantojot SO_REUSEADDR UDP operētājsistēmā Linux, dažādi procesi ļauj pievienot klausÄ«Å”anās ligzdas UDP portam).
  • Ir pievienotas jaunas optimizācijas, piemēram, uzlabota signālu apstrādātāju veiktspēja daudzpavedienu lietojumprogrammās, palielināts apakÅ”procesa moduļa ātrums FreeBSD vidē un ātrāka pagaidu mainÄ«go pieŔķirÅ”ana (pieŔķirot mainÄ«go izteiksmē ā€œfor y in [expr ]ā€ tagad ir tikpat efektÄ«va kā izteiciens ā€œy = exprā€). Kopumā lielākā daļa testu parādÄ«t veiktspējas samazināŔanās salÄ«dzinājumā ar 3.8. nozari (paātrinājums tiek novērots tikai testos write_local un write_deque):

    Python versija 3.4 3.5 3.6 3.7 3.8 3.9
    ā€”ā€”ā€”ā€”ā€” ā€” ā€” ā€” ā€” ā€” ā€”

    Mainīgo un atribūtu lasīŔanas piekļuve:
    lasÄ«t_lokāli 7.1 7.1 5.4 5.1 3.9 4.0
    lasÄ«t_nelokāls 7.1 8.1 5.8 5.4 4.4 4.8
    lasīt_globāls 15.5 19.0 14.3 13.6 7.6 7.7
    lasīt_iebūvēts 21.1 21.6 18.5 19.0 7.5 7.7
    lasīt_klase_no_klases 25.6 26.5 20.7 19.5 18.4 18.6
    lasīt_klases_norādīts_gadījums 22.8 23.5 18.8 17.1 16.4 20.1
    lasīŔanas_gadījumavar 32.4 33.1 28.0 26.3 25.4 27.7
    lasīŔanas_gadījuma_vietas 27.8 31.3 20.8 20.8 20.2 24.5
    lasÄ«t_nosaukums 73.8 57.5 ā€‹ā€‹45.0 46.8 18.4 23.2
    lasīŔanas_saistes metode 37.6 37.9 29.6 26.9 27.7 45.9

    Mainīgo un atribūtu rakstīŔanas piekļuve:
    write_local 8.7 9.3 5.5 5.3 4.3 4.2
    write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    write_global 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Datu struktūras lasīŔanas piekļuve:
    lasīt_saraksts 24.2 24.5 20.8 20.8 19.0 21.1
    lasīt_deque 24.7 25.5 20.2 20.6 19.8 21.6
    lasīt_dikts 24.3 25.7 22.3 23.0 21.0 22.5
    lasīt_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Datu struktūras rakstīŔanas piekļuve:
    rakstīt_saraksts 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    rakstīt_dikts 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Stack (vai rindas) darbības:
    list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    Laika cilpa:
    cilpa_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Noņemts daudzas Python 2.7 funkcijas un metodes, kas iepriekÅ” bija novecojuÅ”as un kuru rezultātā tika parādÄ«ts brÄ«dinājums par novecoÅ”anu iepriekŔējā laidienā, tostarp unescape() metode failā html.parser.HTMLParser,
    tostring() un fromstring() masÄ«vā.masÄ«vā, isAlive() vÄ«tņoÅ”anā. Thread, getchildren() un getiterators() programmā ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() un base64.decodestring().

Avots: opennet.ru

Pievieno komentāru