Python 3.9 programazio lengoaia kaleratzea

Urtebeteko garapenaren ostean aurkeztu programazio-lengoaiaren askapen garrantzitsua Python 3.9. Python 3.9 izan zen ondorengo lehen bertsioa trantsizioa proiektua ziklo berria oharrak prestatzea eta laguntza. Urtean behin sortuko dira bertsio nagusi berriak, eta eguneratze zuzentzaileak bi hilabetean behin kaleratuko dira. Adar esanguratsu bakoitzari urte eta erdirako laguntza emango zaio, eta ondoren beste hiru urte eta erdi garatuko dira ahultasunak konpontzeko.

Adar berriaren lanak hurrengo adar kaleratu baino bost hilabete lehenago hasten dira orain, hau da. Python 3.9 kaleratzearekin batera hasi zen Python 3.10 adarraren alfa probak. Python 3.10 adarra alfa bertsioan egongo da zazpi hilabetez, eta horietan eginbide berriak gehituko dira eta akatsak konponduko dira. Honen ondoren, beta bertsioak hiru hilabetez probatuko dira, eta horietan funtzio berriak gehitzea debekatuko da eta arreta guztia jarriko da akatsak konpontzera. Askatu baino azken bi hilabeteetan, adarra kaleratze hautagaiaren fasean egongo da, eta bertan behin betiko egonkortzea egingo da.

Artean gehitu berrikuntzak Python 3.9-n:

  • Dict klase integratua erabiliz definitutako hiztegietan, agertu "|" bateratze-operadoreentzako laguntza eta "|=" eguneratzeak, hiztegiak bat egiteko aldez aurretik proposatutako {**d1, **d2} eta dict.update metodoak osatzen dituztenak.

    >>> x = {"gakoa1": "x-tik 1 balioa", "2 gakoa": "x-tik 2 balioa"}
    >>> y = {"key2": "y-tik 2 balioa", "3 gakoa": "y-tik 3 balioa"}

    >>> x | y
    {'key1': 'balioa1 x-tik', 'key2': 'balioa2-tik', 'key3': 'balioa3-tik'}

    >>> y | x
    {'giltza2': 'x-tik 2 balioa', '3 gakoa': 'y-tik3 balioa', '1 gakoa': 'x-tik1 balioa'}

  • Moten bilduma integratuak zerrenda, dict eta tuplak biltzen ditu, oinarrizko mota gisa erabil daitezkeenak idazketa-modulutik inportatu gabe. Horiek. idatzi beharrean.Zerrenda, idazketa.Dict eta idazketa.Tuple orain zehaztu dezakezu
    zerrenda, dikta eta tupla besterik ez:

    def greet_all(izenak: zerrenda[str]) -> Bat ere ez:
    izenetan izena emateko:
    print("Kaixo", izena)

  • Ematen dira funtzioak eta aldagaiak anotatzeko tresna malguak. Oharpenak eransteko, idatzizko moduluan Annotated mota berri bat gehitu da, lehendik dauden motak analisi estatikorako edo exekuzio-denbora optimizatzeko erabil daitezkeen metadatu gehigarriekin zabalduz. Kodetik metadatuak atzitzeko, include_extras parametroa gehitu da typing.get_type_hints() metodoan.

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

  • Tonizatuta Dekoratzaileentzako eskakizun gramatikalak - if eta while blokeak erabiltzeko egokia den edozein esamolde orain dekoratzaile gisa erabil daiteke. Aldaketak PyQt5 kodearen irakurgarritasuna nabarmen hobetu zuen eta modulu honen mantentze-lanak erraztu zituen:

    izan zen:
    button_0 = botoiak[0] @button_0.clicked.connect

    Orain idatzi dezakezu:
    @buttons[0].klicked.connect

  • Liburutegi estandarrera gehitu du modulua zoneinfo, IANA ordu-eremuen datu-baseko informazioa biltzen duena.

    >>> zoneinfo-tik inportatu ZoneInfo
    >>> datetime inportazio datatime, timedelta
    >>> # Udako ordua
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> inprimatu (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Ordu estandarra
    >>> dt += timedelta(egunak=7)
    >>> inprimatu (dt)
    2020-11-07 12:00:00-08:00

    >>> inprimatu(dt.tzname())
    PST

  • graphlib modulua gehitu da, eta bertan ezarrita grafikoen ordena topologikorako laguntza.
  • Proposatua aurrizkiak eta lerro amaierak kentzeko metodo berriak - str.removeprefix(aurrizkia) eta str.removesuffix (atzizkia). Metodoak str, byte, bytearray eta collections.UserString objektuetan gehitu dira.

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

  • Inplikatuta analizatzaile berria PEG (Parsing Expression Grammar), analizatzailea ordezkatu zuena LL (1). Analizatzaile berriaren erabilerak LL(1)-ko murrizketak saihesteko erabilitako "hack" batzuk kentzea ahalbidetu zuen, eta analizatzailea mantentzeko lan-kostuak nabarmen murriztu zituen. Errendimenduari dagokionez, analizatzaile berria aurrekoaren maila berean dago gutxi gorabehera, baina malgutasunari dagokionez nabarmen aurreratu da, eta horri esker, hizkuntza-eginbide berriak diseinatzerakoan askeago senti zaitezke. Analizatzaile-kode zaharra mantentzen da oraingoz eta "-X oldparser" marka edo "PYTHONOLDPARSER=1" ingurune-aldagaia erabiliz itzul daiteke, baina 3.10 bertsioan kenduko da.
  • Emanda C luzapen-metodoek definitzen diren moduluen egoerara sartzeko gaitasuna zuzeneko erakusleen deserreferentzia erabiliz, moduluaren egoera PyState_FindModule funtzioa erabiliz bilatu beharrean. Aldaketak C moduluen errendimendua areagotzeko aukera ematen du, moduluaren egoera egiaztatzearen gainkostua murriztuz edo guztiz kenduz. Modulu bat klase batekin lotzeko, C-funtzioa PyType_FromModuleAndSpec() proposatzen da, modulua eta bere egoera lortzeko, C-funtzioak PyType_GetModule() eta PyType_GetModuleState() proposatzen dira, eta klaserako sarbidea duen metodo bat eskaintzea. bertan definitzen den, C-funtzioa PyCMethod eta METH_METHOD bandera proposatzen dira.
  • Zabor biltzailea entregatu Finalizatzailea exekutatu ondoren kanpotik eskuragarri geratzen diren objektu berranimatuak dituzten bildumak blokeatzeko.
  • Gehitutako metodoa os.pidfd_open, eta horri esker, Linux nukleoaren "pidfd" azpisistema PID berrerabilpen egoera kudeatzeko erabil daiteke (pidfd prozesu zehatz batekin lotuta dago eta ez da aldatzen, PID bat beste prozesu batekin lotu daiteke PID horrekin lotutako uneko prozesua amaitu ondoren). ).
  • Unicode zehaztapenaren euskarria 13.0.0 bertsiora eguneratu da.
  • Ezabatuta memoria ihesa Python interpretea prozesu berean berriro abiaraztean.
  • Eraikitako moten sorta, tupla, multzoa, frozenset, zerrenda eta dict-en errendimendua optimizatu da. ezarrita Vectorcall lasterbide-protokoloaren bidez, C hizkuntzan idatzitako objektuetara bizkorrago sartzeko.
  • _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operador, resource, time eta _weakref moduluak kargatzera eraman dira. hastapena hainbat fasetan.
  • Liburutegiko modulu estandarrak audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios eta zlib mugatua erabiltzeko bihurtu dira. ABI egonkorra, Python-en bertsio desberdinetarako luzapen-moduluen muntaketen funtzionagarritasunaren arazoa konpontzen duena (bertsioa eguneratzean, ez dago hedapen-moduluak berreraiki beharrik, eta 3.9rako konpilatutako moduluek 3.10 adarrean lan egin ahal izango dute).
  • Asyncio moduluak reuse_address parametrorako euskarria baztertu du, balizko segurtasun-arazoengatik (Linux-en SO_REUSEADDR UDPrako erabiltzeak prozesu desberdinak entzuteko socketak UDP ataka batera lotzeko aukera ematen du).
  • Optimizazio berriak gehitu dira, adibidez, seinale-kudeatzaileen errendimendu hobetu hari anitzeko aplikazioetan, azpiprozesuaren moduluaren abiadura handitu FreeBSD ingurunean eta aldi baterako aldagaien esleipen azkarragoa (aldagai bat esleitzea "for y in [expr. ]" "y = expr" "" esapidea bezain eraginkorra da orain. Oro har, proba gehienak ikuskizuna errendimenduaren jaitsiera 3.8 adarrarekin alderatuta (abiadura idazketa_local eta idazketa_deque probetan soilik ikusten da):

    Python bertsioa 3.4 3.5 3.6 3.7 3.8 3.9
    β€”β€”β€”β€”β€” β€” β€” β€” β€” β€” β€”

    Aldagaiak eta atributuak irakurtzeko sarbidea:
    irakurri_lokal 7.1 7.1 5.4 5.1 3.9 4.0
    irakurri_ez lokala 7.1 8.1 5.8 5.4 4.4 4.8
    irakurri_globala 15.5 19.0 14.3 13.6 7.6 7.7
    irakurri_eraikia 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
    irakurri_instantziavar 32.4 33.1 28.0 26.3 25.4 27.7
    irakurri_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    irakurri_izendatuple 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

    Aldagaiak eta atributuak idazteko sarbidea:
    idatzi_lokal 8.7 9.3 5.5 5.3 4.3 4.2
    idatzi_ez lokala 10.5 11.1 5.6 5.5 4.7 4.9
    idatzi_globala 19.7 21.2 18.0 18.0 15.8 17.2
    idatzi_klasea 92.9 96.0 104.6 102.1 39.2 43.2
    idatzi_instantziabar 44.6 45.8 40.0 38.9 35.5 40.7
    idatzi_instantziavar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Datuen egitura irakurtzeko sarbidea:
    irakurri_zerrenda 24.2 24.5 20.8 20.8 19.0 21.1
    irakurri_deque 24.7 25.5 20.2 20.6 19.8 21.6
    irakurri_diktua 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

    Datuen egitura idazteko sarbidea:
    idatzi_zerrenda 27.1 28.5 22.5 21.6 20.0 21.6
    idatzi_deka 28.7 30.1 22.7 21.8 23.5 23.2
    idatzi_diktua 31.4 33.3 29.3 29.2 24.7 27.8
    idatzi_diktamena 28.4 29.9 27.5 25.2 23.1 29.8

    Pila (edo ilaran) eragiketak:
    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

    Denbora-begizta:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Kendua Python 2.7 funtzio eta metodo asko lehenago zaharkituta zeuden eta aurreko bertsioan DeprecationWarning bat eragin zuten, html.parser.HTMLParser-eko unescape() metodoa barne,
    tostring() eta fromstring() array.array-n, isAlive() threading-en.Thread, getchildren() eta getiterator() ElementTree-n, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() eta base64.decodestring().

Iturria: opennet.ru

Gehitu iruzkin berria