Scaoileadh teanga cláir Python 3.9

Tar éis bliana d'fhorbairt curtha i láthair eisiúint shuntasach teanga ríomhchlárúcháin Python 3.9. Ba é Python 3.9 an chéad scaoileadh tar éis aistriú tionscadal ar timthriall nua ullmhú agus tacú le heisiúintí. Ginfear eisiúintí móra nua uair sa bhliain anois, agus eiseofar nuashonruithe ceartaitheacha gach dhá mhí. Tabharfar tacaíocht do gach brainse suntasach ar feadh bliana go leith, agus ina dhiaidh sin déanfar trí bliana go leith eile a fhorbairt chun leochaileachtaí a shocrú.

Tosaíonn obair ar bhrainse nua anois cúig mhí roimh scaoileadh an chéad bhrainse eile, i.e. i gcomhthráth le scaoileadh Python 3.9 thosaigh tástáil alfa ar bhrainse Python 3.10. Beidh brainse Python 3.10 i scaoileadh alfa ar feadh seacht mí, agus cuirfear gnéithe nua leis agus socrófar fabhtanna lena linn. Tar éis seo, déanfar na leaganacha béite a thástáil ar feadh trí mhí, agus cuirfear cosc ​​​​ar ghnéithe nua a chur leis agus tabharfar aird ar fad ar fhabhtanna a shocrú. An dá mhí dheireanacha roimh an scaoileadh, beidh an brainse ag céim an iarrthóra scaoilte, ag a ndéanfar an cobhsú deiridh.

I measc curtha leis nuálaíochtaí i Python 3.9:

  • I bhfoclóirí sainithe ag baint úsáide as an rang dict ionsuite, le feiceáil tacaíocht d'oibreoirí cumasc "|" agus nuashonruithe "|=", a chomhlánaíonn na modhanna {**d1, **d2} agus dict.update a moladh roimhe seo chun foclóirí a chumasc.

    >>> x = { "eochair1": "luach1 ó x", "eochair2": "luach2 ó x"}
    >>> y = { "eochair2": "luach2 ó y", "eochair3": "luach3 ó y"}

    >>> x | y
    { 'eochair1': 'luach1 ó x', 'eochair2': 'luach2 ó y', 'eochair3': 'luach3 ó y'}

    >>> y | x
    { 'eochair2': 'luach2 ó x', 'eochair3': 'luach3 ó y', 'eochair1': 'luach1 ó x'}

  • Áirítear sa bhailiúchán cineálacha ionsuite liosta, dict, agus tuple, ar féidir iad a úsáid mar bhunchineálacha gan allmhairiú ón modúl clóscríofa. Iad siúd. in ionad typing.List, typing.Dict agus typing.Tuple is féidir leat a shonrú anois
    liostaigh, dict agus tuple:

    def greet_all(ainmneacha: liosta[str]) -> Dada:
    le haghaidh ainm in ainmneacha:
    print("Dia duit", ainm)

  • Soláthraítear uirlisí solúbtha chun feidhmeanna agus athróga a anótáil. Chun nótaí a cheangal, tá cineál nua Anótáilte curtha leis an modúl clóscríofa, ag cur leis na cineálacha atá ann cheana féin le meiteashonraí breise is féidir a úsáid le haghaidh anailíse statach nó le haghaidh leas iomlán a bhaint as am rite. Chun teacht ar mheiteashonraí ón gcód, cuireadh an paraiméadar include_extras leis an modh typing.get_type_hints().

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

  • Toned síos riachtanais ghramadaí do mhaisitheoirí - slonn ar bith atá oiriúnach le húsáid i mblocanna agus más féidir iad a úsáid mar mhaisitheoir anois. Chuir an t-athrú feabhas suntasach ar inléiteacht an chóid PyQt5 agus rinne sé cothabháil an mhodúil seo a shimpliú:

    Bhí sé:
    cnaipe_0 = cnaipí[0] @cnaipe_0.cliceáilte.ceangail

    Anois is féidir leat scríobh:
    @cnaipí[0].cliceáil.connect

  • Go dtí an leabharlann caighdeánach curtha leis modúl crios faisnéise, lena n-áirítear faisnéis ó bhunachar sonraí crios ama IANA.

    >>> ó zoneinfo allmhairiú ZoneInfo
    >>> ó datetime allmhairiú datetime, timedelta
    >>> # Am samhraidh
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("Meiriceá/Los_Angeles"))
    >>> priontáil(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Am caighdeánach
    >>> dt += timedelta(laethanta=7)
    >>> priontáil(dt)
    2020-11-07 12:00:00-08:00

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

  • Cuireadh modúl graphlib leis, ina bhfuil curtha i bhfeidhm tacaíocht do shórtáil topological graif.
  • Beartaithe modhanna nua chun réimíreanna agus deirí líne a bhaint - str.removeprefix(réimír) agus str.removesuffix(iarmhír). Tá modhanna curtha le str, bearta, bytearray agus collections.UserString objects.

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

  • I gceist parsálaí nua PEG (Gramadach Slonn Parsála), a tháinig in ionad an pharsálaí LL(1). Mar gheall ar úsáid an pharsálaí nua bhíothas in ann fáil réidh le cuid de na “hacks” a úsáideadh chun na srianta in LL(1) a sheachbhóthar, agus laghdaigh sé go mór na costais saothair chun an parsálaí a chothabháil. I dtéarmaí feidhmíochta, tá an parsálaí nua thart ar an leibhéal céanna leis an gceann roimhe seo, ach tá sé go mór chun tosaigh air i dtéarmaí solúbthachta, rud a ligeann duit a bheith níos saor agus tú ag dearadh gnéithe nua teanga. Coinnítear an seanchód parsálaí faoi láthair agus is féidir é a sheoladh ar ais leis an mbratach "-X oldparser" nó an athróg timpeallachta "PYTHONOLDPARSER=1", ach bainfear é i scaoileadh 3.10.
  • Ar choinníoll an cumas do mhodhanna sínte C rochtain a fháil ar staid na modúl ina bhfuil siad sainithe ag baint úsáide as dícheartú pointeora díreach in ionad staid an mhodúil a chuardach ag baint úsáide as an bhfeidhm PyState_FindModule. Ligeann an t-athrú duit feidhmíocht mhodúil C a mhéadú trí laghdú nó deireadh a chur go hiomlán leis an bhforchostas a bhaineann le staid an mhodúil a sheiceáil. Chun modúl a chomhcheangal le haicme, moltar an fheidhm C PyType_FromModuleAndSpec(), chun an modúl agus a staid a fháil, moltar na feidhmeanna C PyType_GetModule() agus PyType_GetModuleState(), agus chun modh rochtana a sholáthar don rang ina bhfuil sé sainithe, moltar an C-function PyCMethod agus an bhratach METH_METHOD .
  • Bailitheoir truflais seachadta ó bhailiúcháin a ghlasáil ina bhfuil réada athbheochainte a fhanann inrochtana go seachtrach tar éis rith an chríochnaitheora.
  • Modh curtha leis os.pidfd_oscailte, a cheadaíonn fochóras eithne Linux "pidfd" a úsáid chun an staid athúsáide PID a láimhseáil (baineann pidfd le próiseas ar leith agus ní athraíonn sé, agus is féidir PID a bheith bainteach le próiseas eile tar éis don phróiseas reatha a bhaineann leis an PID sin a fhoirceannadh ).
  • Nuashonraíodh an tacaíocht don tsonraíocht Unicode go leagan 13.0.0.
  • díbeartha sceitheadh ​​​​cuimhne agus an t-ateangaire Python á athbhunú sa phróiseas céanna.
  • Tá feidhmíocht an raon cineálacha ionsuite, tuple, set, reoiteset, liosta agus dict optamaithe. curtha i bhfeidhm trí úsáid a bhaint as prótacal aicearra Vectorcall chun rochtain níos tapúla ar réada atá scríofa sa teanga C.
  • Bogadh na modúil _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, oibreoir, acmhainn, am agus _weakref chuig luchtú ó tosaigh i roinnt céimeanna.
  • Tiontaíodh na modúil chaighdeánacha leabharlainne audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios agus zlib le húsáid srianta ABI cobhsaí, a réitíonn an fhadhb a bhaineann le hinoibritheacht tionóil de mhodúil síneadh le haghaidh leaganacha éagsúla de Python (agus an leagan á nuashonrú, ní gá modúil síneadh a atógáil, agus beidh modúil arna dtiomsú le haghaidh 3.9 in ann oibriú sa bhrainse 3.10).
  • Tá tacaíocht laghdaithe ag an modúl asyncio don pharaiméadar reuse_address mar gheall ar shaincheisteanna slándála a d’fhéadfadh a bheith ann (le húsáid SO_REUSEADDR do UDP ar Linux ceadaíonn próisis éagsúla soicéid éisteachta a cheangal le calafort UDP).
  • Cuireadh leas iomlán a bhaint as nua, mar shampla, feidhmíocht fheabhsaithe láimhseálaithe comharthaí in iarratais il-snáithithe, luas méadaithe an mhodúil fophróisis i dtimpeallacht FreeBSD, agus sannadh athróg shealadach níos tapúla (athróg a shannadh sa slonn “do y in [expr ]” anois chomh oirfideach leis an slonn “y = expr”). Go ginearálta, an chuid is mó tástálacha taispeáin laghdú feidhmíochta i gcomparáid le brainse 3.8 (ní bhreathnaítear ar luasú ach amháin sna trialacha write_local agus write_deque):

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

    Rochtain léite inathraithe agus tréithe:
    léamh_áitiúil 7.1 7.1 5.4 5.1 3.9 4.0
    léamh_neamháitiúil 7.1 8.1 5.8 5.4 4.4 4.8
    léamh_domhanda 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
    léigh_classvar_ó_rang 25.6 26.5 20.7 19.5 18.4 18.6
    léigh_classvar_ó_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_sliotáin 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
    léite_boundmodh 37.6 37.9 29.6 26.9 27.7 45.9

    Rochtain scríofa inathraithe agus tréithe:
    scríobh_áitiúil 8.7 9.3 5.5 5.3 4.3 4.2
    scríobh_neamháitiúil 10.5 11.1 5.6 5.5 4.7 4.9
    scríobh_domhanda 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_sliotáin 35.6 36.1 27.3 26.6 25.7 27.7

    Rochtain léite struchtúr sonraí:
    read_list 24.2 24.5 20.8 20.8 19.0 21.1
    léamh_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
    léamh_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Rochtain scríofa ar shonraí:
    write_list 27.1 28.5 22.5 21.6 20.0 21.6
    scríobh_deque 28.7 30.1 22.7 21.8 23.5 23.2
    scríobh_dict 31.4 33.3 29.3 29.2 24.7 27.8
    scríobh_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Oibríochtaí cruachta (nó scuaine):
    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

    Lúb ama:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Bhaint go leor feidhmeanna agus modhanna Python 2.7 a bhí imithe i léig roimhe seo agus a raibh Rabhadh Dímheasa mar thoradh orthu san eisiúint roimhe seo, lena n-áirítear an modh unescape() i html.parser.HTMLParser,
    tostring() agus fromstring() in eagar.array, isAlive() in threading.Thread, getchildren() agus getiterator() in ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() agus base64.decodestring().

Foinse: oscailtenet.ru