Utgivning av programmeringssprÄket Python 3.9

Efter ett Ärs utveckling presenteras betydande lansering av programmeringssprÄket Python 3.9. Python 3.9 blev den första versionen efter övergÄngen projektet till en ny cykel för beredning och underhÄll av versioner. Nya betydande versioner kommer nu att skapas en gÄng per Är, medan korrigerande uppdateringar kommer att slÀppas varannan mÄnad. Varje betydande gren kommer att stödjas i ett och ett halvt Är, varefter det kommer att skapas korrigeringar med sÀkerhetsfixar i tre och ett halvt Är.

Arbetet med den nya grenen börjar nu fem mÄnader före lanseringen av nÀsta gren, dvs. samtidigt som lanseringen av Python 3.9 inleddes alfa-testning av Python 3.10-grenen. Grenen Python 3.10 kommer att befinna sig i alfa-version under sju mÄnader, under vilka nya funktioner kommer att lÀggas till och buggar kommer att ÄtgÀrdas. Efter detta kommer betatestning att pÄgÄ under tre mÄnader, under vilken nya funktioner inte fÄr lÀggas till och allt fokus kommer att ligga pÄ att ÄtgÀrda buggar. De sista tvÄ mÄnaderna före lanseringen kommer grenen att befinna sig i releasekandidatstadiet, dÀr den slutliga stabiliseringen kommer att utföras.

Bland tillÀggna nyheterna i Python 3.9:

  • I ordböcker som definieras med den inbyggda klassen dict, har det tillkommit stöd för sammanfogningsoperatorerna "|" och uppdateringsoperatorerna "|=", som kompletterar metoderna {**d1, **d2} och dict.update, som tidigare föreslagits för att sammanfoga ordböcker.

    >>> 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'}

  • Inbyggda samlingstyper inkluderar list, dict och tuple, som kan anvĂ€ndas som grundtyper utan att importera frĂ„n modulen typing. Det vill sĂ€ga att istĂ€llet för typing.List, typing.Dict och typing.Tuple kan man nu ange
    bara list, dict och tuple:

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

  • Erbjuds flexibla verktyg för annotering av funktioner och variabler. För att bifoga annotationer har den nya typen Annotated lags till modulen typing, vilket utökar befintliga typer med ytterligare metadata som kan anvĂ€ndas vid statisk analys eller för optimeringar under körning. För att fĂ„ tillgĂ„ng till metadata frĂ„n koden har parametern include_extras lagts till metoden typing.get_type_hints().

    charType = Annotated[int, ctype(«char»)]
    UnsignedShort = Annotated[int, struct2.ctype(‘H’)]

  • LĂ€ttade Grammatiska krav pĂ„ dekoratorer — nu kan vilket uttryck som helst som Ă€r lĂ€mpligt för anvĂ€ndning i if- och while-block anvĂ€ndas som dekorator. Denna Ă€ndring har avsevĂ€rt förbĂ€ttrat lĂ€sbarheten i koden för PyQt5 och förenklat underhĂ„llet av denna modul:

    Förut:
    button_0 = buttons[0]
    @button_0.clicked.connect

    Nu kan man skriva:
    @buttons[0].clicked.connect

  • I standardbiblioteket tillagd modul zoneinfo, som inkluderar information frĂ„n IANA:s tidszonsdatabas.

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

    >>> dt.tzname()
    ‘PDT’

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

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

  • Modulen graphlib har lagts till, som har möjligheten stödjer topologisk sortering av grafer.
  • Nya metoder har föreslagits för att ta bort prefix och suffix frĂ„n strĂ€ngar — str.removeprefix(prefix) och str.removesuffix(suffix). Metoderna har lagts till i objekten str, bytes, bytearray och collections.UserString. >>> s = «FooBar»

    >>> s.removeprefix(«Foo»)
    ‘Bar’
    Implementerad

  • ny parser PEG (Parsing Expression Grammar), som ersatte parsern LL(1) . AnvĂ€ndningen av den nya parsern har möjliggjort att vissa "hack" som anvĂ€nts för att kringgĂ„ begrĂ€nsningar i LL(1) har tagits bort, och har avsevĂ€rt sĂ€nkt arbetsinsatsen för att underhĂ„lla parsern. NĂ€r det gĂ€ller prestanda ligger den nya parsern ungefĂ€r pĂ„ samma nivĂ„ som den tidigare, men övertrĂ€ffar den avsevĂ€rt nĂ€r det gĂ€ller flexibilitet, vilket möjliggör en mer fri kĂ€nsla vid utformningen av nya sprĂ„kmöjligheter. Koden för den gamla parsern har fortfarande bevarats och kan Ă„terstĂ€llas med flaggan "-X oldparser" eller miljövariabeln "PYTHONOLDPARSER=1", men kommer att tas bort i version 3.10..
  • TillhandahĂ„llet möjlighet för C-extensioner att fĂ„ tillgĂ„ng till tillstĂ„ndet för de moduler de definieras i, med direkt dereferens av pekare istĂ€llet för att söka modulens tillstĂ„nd via funktionen PyState_FindModule. Ändringen möjliggör ökad prestanda för C-moduler genom att minska eller helt utesluta overheadkostnader för att kontrollera modulens tillstĂ„nd. För att koppla en modul till en klass föreslĂ„s C-funktionen PyType_FromModuleAndSpec(), för att erhĂ„lla modulen och dess tillstĂ„nd C-funktionerna PyType_GetModule() och PyType_GetModuleState(), och för att tillhandahĂ„lla metoden tillgĂ„ng till klassen dĂ€r den definieras, C-funktionen PyCMethod och flaggan METH_METHOD.
  • SkrĂ€psamlaren Ă€r befriad frĂ„n att blockera insamlingar som inkluderar reanimerade objekt, som förblir tillgĂ€ngliga utifrĂ„n efter att finalisatoren körts.
  • Metod tillagd os.pidfd_open, som möjliggör anvĂ€ndning av Linux-kĂ€rnans "pidfd"-subsystem för att hantera situationen med Ă„teranvĂ€ndning av PID (pidfd Ă€r kopplad till en specifik process och Ă€ndras inte, medan PID kan knytas till en annan process efter avslutandet av den aktuella processen som Ă€r associerad med denna PID).
  • Stödet för Unicode-specifikationen har uppdaterats till version 13.0.0.
  • ÅtgĂ€rdad minneslĂ€ckage vid Ă„terinitiering av Python-tolken i en process.
  • Prestanda för de inbyggda typerna range, tuple, set, frozenset, list och dict har optimerats, genom implementeringen av det snabba anropsprotokollet Vectorcall för snabbare Ă„tkomst till objekt skrivna i C. Modulerna _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time och _weakref har övergĂ„tt till att laddas med
  • initialisering i flera steg. Modulerna i standardbiblioteket audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios och zlib har övergĂ„tt till att anvĂ€nda en begrĂ€nsad.
  • stabil ABI , vilket löser problemet med funktionaliteten för sammansatta moduler för olika versioner av Python (vid uppgradering av version behöver inte modulutvidgningar byggas om, och moduler som byggts för 3.9 kan fungera i 3.10-grenen).I asyncio-modulen har stödet för parametern reuse_address upphört pĂ„ grund av potentiella sĂ€kerhetsproblem (anvĂ€ndning av SO_REUSEADDR för UDP i Linux tillĂ„ter olika processer att koppla lyssnande sockets till UDP-porten).
  • I asyncio-modulen har stödet för parametern reuse_address upphört pĂ„ grund av potentiella sĂ€kerhetsproblem (anvĂ€ndning av SO_REUSEADDR för UDP i Linux tillĂ„ter olika processer att koppla lyssnande sockets till UDP-porten).
  • Nya optimeringar har lagts till, till exempel har prestandan hos signalförhandlare i flerstĂ€mmiga applikationer förbĂ€ttrats, hastigheten för subprocess-modulen har ökat i FreeBSD-miljöer, och tilldelningen av tidsvariabler har snabbsats (tilldelning av variabel i uttrycket "for y in [expr]" Ă€r nu lika effektivt som uttrycket "y = expr"). Överlag har de flesta testerna visar visat en minskning av prestandan jĂ€mfört med version 3.8 (snabbheten observeras endast i testen write_local och write_deque):

    Python-version 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Åtkomst till variabler och attribut:
    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

    Åtkomst för skrivning av variabler och attribut:
    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

    Åtkomst till datastrukturens lĂ€sning:
    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

    Åtkomst för skrivning av datastukturer:
    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

    Stack (eller kö) operationer:
    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

    Timing loop:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Borttagna mĂ„nga funktioner och metoder i Python 2.7 som tidigare markerats som förĂ„ldrade och som i den senaste versionen gav ett DeprecationWarning, inklusive metoden unescape() i html.parser.HTMLParser,
    tostring() och fromstring() i array.array, isAlive() i threading.Thread, getchildren() och getiterator() i ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() och base64.decodestring().

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster