Útgáfa af Python 3.9 forritunarmálinu

Eftir eins árs þróun fram mikilvæg útgáfu forritunarmáls Python 3.9. Python 3.9 var fyrsta útgáfan á eftir umskipti verkefni á ný hringrás undirbúningur og stuðningur við útgáfur. Nýjar helstu útgáfur verða nú búnar til einu sinni á ári og leiðréttingaruppfærslur verða gefnar út á tveggja mánaða fresti. Hvert umtalsvert útibú verður styrkt í eitt og hálft ár, en eftir það verða önnur þrjú og hálft ár þróað til að laga veikleika.

Vinna við nýtt útibú hefst nú fimm mánuðum fyrir útgáfu næsta útibús, þ.e. samhliða útgáfu Python 3.9 hófst alfa prófun á Python 3.10 útibúinu. Python 3.10 útibúið verður í alfa útgáfu í sjö mánuði, þar sem nýjum eiginleikum verður bætt við og villur lagaðar. Eftir þetta verða beta útgáfur prófaðar í þrjá mánuði, á þeim tíma verður bannað að bæta við nýjum eiginleikum og allri athygli verður beint að því að laga villur. Síðustu tvo mánuðina fyrir útgáfu verður útibúið á útgáfustigi, þar sem endanleg stöðugleiki fer fram.

Meðal bætt við nýjungar í Python 3.9:

  • Í orðabókum sem eru skilgreindar með því að nota innbyggða dict flokkinn, birtist stuðningur við samruna rekstraraðila "|" og "|=" uppfærslur, sem bæta við {**d1, **d2} og dict.update aðferðir sem áður voru lagðar til við sameiningu orðabóka.

    >>> x = {"key1": "gildi1 frá x", "key2": "gildi2 frá x"}
    >>> y = {"key2": "gildi2 frá y", "key3": "gildi3 frá 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'}

  • Innbyggt safn tegunda inniheldur lista, dict og tuple, sem hægt er að nota sem grunngerðir án þess að flytja inn úr innsláttareiningunni. Þeir. í stað þess að slá.List, slá.Dict og slá.Túple geturðu nú tilgreint
    bara lista, dict og tuple:

    def greet_all(nöfn: listi[str]) -> Ekkert:
    fyrir nöfn í nöfnum:
    print("Halló", nafn)

  • Eru veittar sveigjanleg verkfæri til að gera athugasemdir við aðgerðir og breytur. Til að hengja við athugasemdir hefur nýrri Annotated tegund verið bætt við innsláttareininguna, sem útvíkkar núverandi gerðir með viðbótarlýsigögnum sem hægt er að nota fyrir kyrrstöðugreiningu eða til hagræðingar á keyrslutíma. Til að fá aðgang að lýsigögnum úr kóða hefur færibreytunni include_extras verið bætt við typing.get_type_hints() aðferðina.

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

  • Tónað niður málfræðilegar kröfur til skreytinga - hvaða tjáning sem hentar til notkunar í ef og á meðan kubbum er nú hægt að nota sem skreytingaraðila. Breytingin bætti verulega læsileika PyQt5 kóðans og einfaldaði viðhald á þessari einingu:

    Það var:
    button_0 = hnappar[0] @button_0.clicked.connect

    Nú getur þú skrifað:
    @hnappar[0].clicked.connect

  • Til venjulegt bókasafn bætt við mát svæðisupplýsingar, sem inniheldur upplýsingar úr IANA tímabeltisgagnagrunninum.

    >>> frá zoneinfo flytja inn ZoneInfo
    >>> frá datetime import datetime, timedelta
    >>> # Sumartími
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> prenta (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Venjulegur tími
    >>> dt += timedelta(dagar=7)
    >>> prenta (dt)
    2020-11-07 12:00:00-08:00

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

  • Bætt við graphlib einingu, þar sem komið til framkvæmda stuðningur við staðfræðilega flokkun á línuritum.
  • Lagt til nýjar aðferðir til að fjarlægja forskeyti og línuendingar - str.removeprefix(prefix) og str.removesuffix(suffix). Aðferðum hefur verið bætt við str, bæti, bytearray og collections.UserString hluti.

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

  • Taka þátt nýr flokkari PEG (Parsing Expression Grammar), sem kom í stað þáttarans LL(1). Notkun nýja þáttarans gerði það að verkum að hægt var að losna við sum „hakk“ sem notuð voru til að komast framhjá takmörkunum í LL(1) og minnkaði verulega launakostnað við að viðhalda þáttaranum. Hvað varðar frammistöðu er nýi þáttarinn um það bil á sama stigi og sá fyrri, en er verulega á undan honum hvað varðar sveigjanleika, sem gerir þér kleift að vera frjálsari þegar þú hannar nýja tungumálaeiginleika. Gamli þátttakóðinn er geymdur í bili og hægt er að skila honum með „-X oldparser“ fánanum eða „PYTHONOLDPARSER=1“ umhverfisbreytunni, en verður fjarlægður í útgáfu 3.10.
  • Veitt getu C-framlengingaraðferða til að fá aðgang að stöðu eininganna þar sem þær eru skilgreindar með því að nota beina tilvísun bendils í stað þess að leita að einingarstöðunni með því að nota PyState_FindModule aðgerðina. Breytingin gerir þér kleift að auka afköst C eininga með því að draga úr eða alveg útrýma kostnaði við að athuga ástand einingarinnar. Til að tengja einingu við bekk er C-fallið PyType_FromModuleAndSpec() lagt til, til að fá eininguna og ástand hennar eru lagðar til C-föllin PyType_GetModule() og PyType_GetModuleState() og til að veita aðferð með aðgang að bekknum þar sem það er skilgreint, er lagt til C-fallið PyCMethod og METH_METHOD fánann. .
  • Rusla safnari afhent frá því að læsa söfnum sem innihalda endurlífga hluti sem eru áfram aðgengilegir að utan eftir að lokaútgáfan keyrir.
  • Aðferð bætt við os.pidfd_open, sem gerir kleift að nota Linux kjarna undirkerfið „pidfd“ til að takast á við PID endurnotkunaraðstæður (pidfd er tengt ákveðnu ferli og breytist ekki, á meðan PID er hægt að tengja við annað ferli eftir að núverandi ferli sem tengist því PID lýkur ).
  • Stuðningur við Unicode forskriftina hefur verið uppfærður í útgáfu 13.0.0.
  • Útrýmt minnisleka þegar Python túlkurinn er endurræstur í sama ferli.
  • Frammistaða innbyggðu tegundanna, tuple, set, frozenset, list og dict hefur verið fínstillt. komið til framkvæmda með því að nota Vectorcall flýtileiðasamskiptareglur fyrir hraðari aðgang að hlutum sem eru skrifaðir á C tungumálinu.
  • Einingarnar _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time og _weakref eru hlaðnar frá frumstilling í nokkrum áföngum.
  • Hefðbundnum bókasafnseiningum audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios og zlib hefur verið breytt í takmarkaða notkun stöðugt ABI, sem leysir vandamálið um virkni samsetningar framlengingareininga fyrir mismunandi útgáfur af Python (þegar útgáfuna er uppfært er engin þörf á að endurbyggja framlengingareiningar, og einingar sem eru settar saman fyrir 3.9 munu geta virkað í 3.10 útibúinu).
  • Asyncio einingin hefur úrelt stuðning við reuse_address færibreytuna vegna hugsanlegra öryggisvandamála (að nota SO_REUSEADDR fyrir UDP á Linux gerir mismunandi ferlum kleift að tengja hlustunarinnstungur við UDP tengi).
  • Nýjum hagræðingum hefur verið bætt við, til dæmis, bætt afköst merkjameðferðaraðila í fjölþráðum forritum, aukinn hraði á undirferliseiningunni í FreeBSD umhverfinu og hraðari úthlutun tímabundinna breyta (úthluta breytu í orðatiltækinu „fyrir y í [expr) ]” er nú jafn árangursríkt og orðatiltækið „y = expr“ "). Almennt, flest próf sýning lækkun á frammistöðu samanborið við grein 3.8 (hraði sést aðeins í write_local og write_deque prófunum):

    Python útgáfa 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Lesaðgangur fyrir breytu og eiginleika:
    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
    les_flokksvara_úr_bekk 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
    lesbundin aðferð 37.6 37.9 29.6 26.9 27.7 45.9

    Skrifaðgangur fyrir breytu og eiginleika:
    skrifa_staðbundið 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
    skrifa_global 19.7 21.2 18.0 18.0 15.8 17.2
    skrifa_flokksvara 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

    Gagnaskipulag lesaðgangur:
    leslisti 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

    Gagnaskipulag skrifa aðgangur:
    skrifa_listi 27.1 28.5 22.5 21.6 20.0 21.6
    skrifa_deque 28.7 30.1 22.7 21.8 23.5 23.2
    skrifa_orð 31.4 33.3 29.3 29.2 24.7 27.8
    skrifa_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Stafla (eða biðröð) aðgerðir:
    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

    Tímatökulykkja:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Fjarlægt margar Python 2.7 aðgerðir og aðferðir sem áður voru úreltar og leiddu til DeprecationWarning í fyrri útgáfu, þar á meðal unescape() aðferðin í html.parser.HTMLParser,
    tostring() og fromstring() í array.array, isAlive() í threading.Thread, getchildren() og getiterator() í ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() og base64.decodestring().

Heimild: opennet.ru

Bæta við athugasemd