Python 3.9 programmeerimiskeele vÀljalaskmine

PĂ€rast aastat arendust esitatud tĂ€htis programmeerimiskeele vĂ€ljalaskmine Python 3.9. Python 3.9 on esimene vĂ€ljalaskmine pĂ€rast ĂŒleminekut projekti uue tsĂŒkli vĂ€ljalaskmise ettevalmistamiseks ja toetamiseks. Uued olulised vĂ€ljalasked tehakse nĂŒĂŒd kord aastas, samas kui paranduste uuendused ilmuvad iga kahe kuu tagant. Iga tĂ€htis haru toetatakse poolteist aastat, millele jĂ€rgneb veel kolm ja pool aastat turvaaukude parandamiseks.

Uue haru töö algab nĂŒĂŒd viis kuud enne jĂ€rgmise haru vĂ€ljalaskmist, st samaaegselt Python 3.9 vĂ€ljalaskmisega algas Python 3.10 haru alpha-testimine. Python 3.10 haru on alpha-vĂ€ljal, mis kestab seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse tĂ”rkeid. SeejĂ€rel toimub kolme kuu jooksul beetaversioonide testimine, mille kĂ€igus uusi funktsioone ei lubata ja kogu tĂ€helepanu suunatakse tĂ”rgete parandamisele. Viimased kaks kuud enne vĂ€ljalaset on haru kandidaadi versiooni staatuses, mille jooksul toimub lĂ”plik stabiliseerimine.

Kuna lisatud uudised Pythonis 3.9:

  • SĂ”naraamatutes, mis on mÀÀratud sisseehitatud klassi dict abil, ilmus toetatakse ĂŒhendamisoperaatoreid «|» ja uuendamisoperaatoreid «|=», mis tĂ€iustavad meetodeid {**d1, **d2} ja dict.update, mis varem pakkusid sĂ”naraamatute ĂŒ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 list, dict ja tuple, mida saab kasutada pĂ”hihĂ€lvetena ilma typing moodulist impordita. See tĂ€hendab, et typing.List, typing.Dict ja typing.Tuple asemel vĂ”ib nĂŒĂŒd mĂ€rkida lihtsalt
    list, dict ja tuple:

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

  • Pakutakse paindlikke vahendeid funktsioonide ja muutujate annotatsioonide lisamiseks. Annotatsioonide sidumiseks on typing moodulisse lisatud uus tĂŒĂŒp Annotated, mis laiendab olemasolevaid tĂŒĂŒpe lisanduvate metaandmetega, mida saab kasutada staatilises analĂŒĂŒsis vĂ”i kĂ€itamise ajal optimeerimiseks. Metaandmete saamiseks koodist on meetodisse typing.get_type_hints() lisatud parameeter include_extras.

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

  • Leevenenud grammatika nĂ”uded dekoratooride suhtes — ĂŒkskĂ”ik milline vĂ€ljend, mis sobib if ja while plokkides kasutamiseks, vĂ”ib nĂŒĂŒd olla dekoratoorina kasutatud. Muudatus on oluliselt parandanud PyQt5 koodi loetavust ja lihtsustanud selle mooduli hooldust:

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

    NĂŒĂŒd vĂ”ib kirjutada:
    @buttons[0].clicked.connect

  • Standardraamatukogus lisatud mooduli 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'

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

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

  • Lisatud on graphlib moodul, milles on rakendatud toetatakse graafide topoloogilist sortimist.
  • Pakutud on uued meetodid stringide prefixide ja suffixide 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 parser'i kasutuselevĂ”tt on vĂ”imaldanud loobuda teatud „trikkidest“, mis olid kasutusel LL(1) piirangute ĂŒletamiseks, ning oluliselt vĂ€hendanud parseri hoolduskulusid. Uue parseri jĂ”udlus on enam-vĂ€hem sama, mis eelmisel, kuid see ĂŒletab seda oluliselt paindlikkuse osas, mis vĂ”imaldab vabamalt uusi keele vĂ”imalusi kavandada. Vana parseri kood on praegu sĂ€ilitatud ja selle saab taastada, kasutades lippu „-X oldparser“ vĂ”i keskkonnamuutujat „PYTHONOLDPARSER=1“, kuid see eemaldatakse versioonis 3.10.
  • Soodustatud C-extensions access to the state of the modules in which they are defined, using direct dereferencing of pointers instead of searching the module state with the PyState_FindModule function. The change increases the performance of C modules by reducing or completely eliminating the overhead of verifying the module state. A C function PyType_FromModuleAndSpec() is proposed to associate the module with the class, C functions PyType_GetModule() and PyType_GetModuleState() for retrieving the module and its state, and the C function PyCMethod and the METH_METHOD flag to provide the method access to the class in which it is defined.
  • KĂ”rvalvĂ€rvide kogu vabastatud from collection locks involving resurrected objects that remain accessible from outside after the finalizer has run.
  • Uus meetod os.pidfd_open, enabling the use of the Linux kernel subsystem "pidfd" to handle the situation of PID reuse (pidfd is linked to a specific process and does not change, while the PID can be bound to another process after the current process associated with this PID has finished).
  • Unicode spetsiifikatsioon on uuendatud versioonile 13.0.0.
  • Eemaldatud mĂ€lu leke Python tĂ”lgendi korduva alglaadimise korral ĂŒhe protsessi sees.
  • On toimunud tĂ€iendav optimeerimine sisseehitatud tĂŒĂŒpide jaoks nagu range, tuple, set, frozenset, list ja dict, rakendatud Vectorcalli kiire kĂ”neprotokolli kasutamise kaudu, et objekti, mis on kirjutatud C keeles, hĂ”lpsasti kĂ€tte saada.
  • Moodulid _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time ja _weakref on ĂŒmber suunatud laadimisele mitmeetapilise initsialiseerimisega..
  • Standardraamatukogu moodulid audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios ja zlib on muudetud kasutama piiratud stabiilset ABI, mis lahendab probleemid moodulite laienduste töökindluse osas erinevate Python versioonide jaoks (versiooniuuenduse korral ei pea mooduleid uuesti kompileerima ning 3.9 jaoks kompileeritud moodulid saavad töötada 3.10 harudes).
  • Moodulis asyncio on vĂ”imalikest turvariskidest tulenevalt peatatud reuse_address parameetri tugi (SO_REUSEADDR kasutamine UDP jaoks Linuxis lubab erinevatel protsessidel siduda kuulamis sokke UDP-porti).
  • Uued optimeerimised funktsioonid, sealhulgas on paranenud signaalide töötlemise jĂ”udlus mitme lĂ”imega rakendustes, subprocess mooduli kiirus FreeBSD keskkonnas on suurenenud ning ajutiste muutujate mÀÀramine on kiirem (muutuja mÀÀramine vĂ€ljendis „for y in [expr]“ on nĂŒĂŒd jĂ”udluses samal tasemel nagu „y = expr“). Üldiselt nĂ€itavad enamiku testide tulemused langust vĂ”rreldes 3.8 haruga (kiirus paraneb ainult write_local ja write_deque testides):

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

    Muutuja ja atribuudi lugemise juurde pÀÀ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 atribuudi kirjutamise juurde pÀÀ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

    Andmete struktuuri lugemisjuurdepÀÀ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

    Andmete struktuuri kirjutamisjuurdepÀÀ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

    Stacki (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 mÔÔtmine:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Eemaldatud paljusid funktsioone ja meetodeid Python 2.7, mis olid varem mĂ€rgitud kui vananenud ja mille eelnevas vĂ€ljaandes oli seotud DeprecationWarning'i teade, sealhulgas meetod unescape() html.parser.HTMLParser'is,
    tostring() ja fromstring() array.array'is, isAlive() threading.Thread'is, getchildren() ja getiterator() ElementTree'is, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ja base64.decodestring().

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster