Python 3.9 programmeerimiskeele vÀljaanne

PĂ€rast aasta arendust esitati tĂ€htis programmeerimiskeele vĂ€ljaanne Python 3.9. Python 3.9 on esimene vĂ€ljaanne pĂ€rast ĂŒleminekut projektile uus tsĂŒkkel vĂ€ljaannete ettevalmistamiseks ja toetamiseks. Uued olulised vĂ€ljaanded toimuvad nĂŒĂŒd kord aastas, samas kui parandusi avaldatakse iga kahe kuu tagant. Iga oluline haru toetatakse poolteist aastat, seejĂ€rel tehakse sellele veel kolme ja pool aasta jooksul turvaparandusi.

Uue haru arendamine algab nĂŒĂŒd viis kuud enne jĂ€rgmise haru vĂ€ljaandmist, st samaaegselt Python 3.9 alustatud alpha-testimisega Python 3.10 haru. Python 3.10 haru on alphas vĂ€ljaannetel seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. PĂ€rast seda toimub kolme kuu jooksul beetaversioonide testimine, mille kĂ€igus ei lubata uute funktsioonide lisamist ja kĂ”ik tĂ€helepanu keskendub vigade parandamisele. Viimased kaks kuud enne vĂ€ljaannet on haru kandidaatide vabastamise faasis, kus toimub lĂ”plik stabiliseerimine.

Sealhulgas lisatud uuendusi Python 3.9-s:

  • SĂ”nastikes, mis on mÀÀratud sisseehitatud klassi dict abil, on on toetatud ĂŒhinemisoperaatorid „|” ja uuendamise operaator „|=”, mis tĂ€iustavad meetodeid {**d1, **d2} ja dict.update, mis varem olid pakutud sĂ”nastike ĂŒhendamiseks.

    >>> x = {"key1": "value1 from x", "key2": "value2 from x"}
    >>> y = {"key2": "value2 from y", "key3": "value3 from 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’}

  • Sisseehitatud tĂŒĂŒpide kogum sisaldab loendi, sĂ”nastiku ja tuple, mida saab kasutada pĂ”hitĂŒĂŒpidena ilma mooduli typing importimata. St. asemel typing.List, typing.Dict ja typing.Tuple vĂ”ib nĂŒĂŒd mÀÀrata
    lihtsalt list, dict ja tuple:

    def greet_all(names: list[str]) -> None:
    for name in names:
    print("Hello", name)

  • Toetatakse paindlikud vahendid funktsioonide ja muutujate annotatsioonide tegemiseks. Uus Annotated tĂŒĂŒp on lisatud typing moodulisse, mis laiendab olemasolevaid tĂŒĂŒpe tĂ€iendavate metainformatsioonidega, mida saab kasutada staatiliseks analĂŒĂŒsiks vĂ”i tĂ€itmise ajal optimeerimiseks. Metainformatsioonile juurdepÀÀsu saamiseks on meetodisse typing.get_type_hints() lisatud parameeter include_extras.

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

  • Pehmendatud dekoratorite grammatikanĂ”uded — iga vĂ€ljend, mis sobib kasutamiseks if ja while plokkides, saab nĂŒĂŒd kasutada dekoratorina. Muudatus on oluliselt parandanud PyQt5 koodi loetavust ja lihtsustanud selle mooduli hooldamist:

    Oli:
    button_0 = buttons[0]
    @button_0.clicked.connect

    NĂŒĂŒd saab kirjutada:
    @buttons[0].clicked.connect

  • Standardse raamatukogu on lisatud moodul zoneinfo, mis sisaldab teavet IANA ajavööndite andmebaasist.

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime, timedelta
    >>> # Suveaeg
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> print(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Talveaeg
    >>> dt += timedelta(days=7)
    >>> print(dt)
    2020-11-07 12:00:00-08:00

    >>> print(dt.tzname())
    PST

  • Lisatud moodul graphlib, mis rakendatud toetab graafide topoloogilist sorteerimist.
  • Pakutud uued meetodid stringide ees- ja jĂ€relliidete eemaldamiseks — str.removeprefix(prefix) ja str.removesuffix(suffix). Meetodid on lisatud str, bytes, bytearray ja collections.UserString objektidesse.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Bar'

  • Kasutusele on vĂ”etud uus parser PEG (Parsing Expression Grammar), mis asendas parseri LL(1). Uue parseri kasutamine on vĂ”imaldanud vabaneda mĂ”ningatest "kettidest", mida on kasutatud LL(1) piirangute ĂŒletamiseks, ja oluliselt vĂ€hendada parseri hooldamise koormust. Uue parseri jĂ”udlus on ligikaudu sama, mis eelmisel, kuid see on oluliselt paindlikum, mis vĂ”imaldab uute keelevĂ”imaluste projekteerimisel vabamalt tunda. Vanem parser on siiski sĂ€ilinud ja selle saab aktiveerida, kasutades lippu "-X oldparser" vĂ”i keskkonnamuutujat "PYTHONOLDPARSER=1", kuid see eemaldatakse versioonis 3.10.
  • Pakkuv vĂ”imalus C-laienduste meetodite juurdepÀÀsule moodulite olekule, kus need on mÀÀratletud, kasutades otseviidete dereferentseerimist, selle asemel et otsida mooduli olekut funktsiooni PyState_FindModule abil. Muudatus vĂ”imaldab suurendada C-moodulite jĂ”udlust, vĂ€hendades vĂ”i tĂ€ielikult kĂ”rvaldades mooduli oleku kontrollimisega seotud kulusid. Mooduli klassiga seostamiseks on ette nĂ€htud C-funktsioon PyType_FromModuleAndSpec(), mooduli ja selle oleku saamiseks C-funktsioonid PyType_GetModule() ja PyType_GetModuleState(), ning meetodi juurdepÀÀsuks klassile, kus see on mÀÀratletud, C-funktsioon PyCMethod ja lipp METH_METHOD.
  • PrĂŒgikoristus vabanenud plokkidest, mis sisaldavad taastatud objekte, mis jÀÀvad pĂ€rast finalisaatori kĂ€ivitamist vĂ€ljastpoolt kĂ€ttesaadavaks.
  • Lisatud meetod os.pidfd_open, mis vĂ”imaldab kasutada Linuxi tuuma "pidfd" alam sĂŒsteemi olukordade kĂ€sitlemiseks, kus PID-i uuesti kasutamine on vajalik (pidfd on seotud kindla protsessiga ja ei muutu, samas kui PID vĂ”ib pĂ€rast praeguse protsessi lĂ”petamist olla seotud teise protsessiga).
  • Unicode spetsiifkatsioon on ajakohastatud versioonile 13.0.0.
  • Korrigeeritud mĂ€lu leke Python tĂ”lgendaja korduva initsialiseerimise korral ĂŒhes protsessis.
  • Sisseehitatud tĂŒĂŒpide range, tuple, set, frozenset, list ja dict jĂ”udluse optimeerimine on Ă€ra tehtud rakendades kiirkutsumise protokolli Vectorcall, et kiirendada C keeles kirjutatud objektide juurde pÀÀsemist. Moodulid _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time ja _weakref on ĂŒle viidud laadimisele
  • mitmeastmelise initsialiseerimisega Standardteegid audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios ja zlib on ĂŒle viidud kasutusele piiratud.
  • stabiilne ABI , mis lahendab probleemid moodulite laienduste koostamise toimivuses erinevate Python versioonide jaoks (versiooni vĂ€rskendamisel ei ole vaja mooduleid uuesti kompileerida ning 3.9 jaoks loodud moodulid saavad töötada 3.10 harus).Moodulis asyncio on potentsiaalsete turvaprobleemide tĂ”ttu lĂ”petatud parameetri reuse_address toetamine (SO_REUSEADDR kasutamine UDP jaoks Linuxis vĂ”imaldab erinevatel protsessidel ĂŒhenduda kuulamis soketitega UDP-pordile).
  • Modulis asyncio on peatatud reuse_address parameetri tugi (SO_REUSEADDR kasutamine UDP jaoks Linuxis vĂ”imaldab erinevatel protsessidel ĂŒhendada kuulamis sokette UDP-pordile) potentsiaalsete turvaprobleemide tĂ”ttu.
  • Uued optimeerimised on lisatud, nĂ€iteks on tĂ”hustatud signaalitöötlejate jĂ”udlust mitme lĂ”imega rakendustes, subprocess-mooduli töökiirus FreeBSD keskkonnas on suurenenud ja ajutiste muutujate mÀÀramine on kiirem (muutuja mÀÀramine vĂ€ljendis „for y in [expr]” ei jÀÀ enam alla vĂ€ljendile „y = expr”). Üldiselt nĂ€itavad enamik teste langetatud jĂ”udlust vĂ”rreldes 3.8 haruga (kiirusetĂ”us on tĂ€heldatud ainult write_local ja write_deque testides):

    Python versioon 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Muutuja ja atribuutide lugemise juurdepÀÀs:
    read_local 7.1 7.1 5.4 5.1 3.9 4.0
    read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
    read_global 15.5 19.0 14.3 13.6 7.6 7.7
    read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
    read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Muutuja ja atribuutide kirjutamise juurdepÀÀs:
    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

    Andmestruktuuri lugemise juurdepÀÀs:
    read_list 24.2 24.5 20.8 20.8 19.0 21.1
    read_deque 24.7 25.5 20.2 20.6 19.8 21.6
    read_dict 24.3 25.7 22.3 23.0 21.0 22.5
    read_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Andmestruktuuri kirjutamise juurdepÀÀs:
    write_list 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
    write_dict 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

    Virna (vÔi jÀrjekorra) toimingud:
    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

    Aja tsĂŒkkel:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Eemaldatud Paljusid Python 2.7 funktsioone ja meetodeid, mis olid varem markeeritud kui aegunud ja viimases vĂ€ljaandes pĂ”hjustasid DeprecationWarningi, sealhulgas meetod unescape() html.parser.HTMLParseris,
    tostring() ja fromstring() array.array'is, isAlive() threading.Thread'is, getchildren() ja getiterator() ElementTree's, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ja base64.decodestring().

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster