Publikimi i gjuhës së programimit Python 3.9

Pas njĂ« viti zhvillimi u paraqit lĂ«shim tĂ« rĂ«ndĂ«sishĂ«m tĂ« gjuhĂ«s sĂ« programimit Python 3.9. Python 3.9 u bĂ« lĂ«shimi i parĂ« pas kalimit projektit nĂ« ciklin e ri tĂ« pĂ«rgatitjes dhe mbĂ«shtetjes sĂ« lĂ«shimeve. LĂ«shimet e reja tĂ« rĂ«ndĂ«sishme tani do tĂ« formohen njĂ« herĂ« nĂ« vit, ndĂ«rsa pĂ«rditĂ«simet korrektuese do tĂ« lĂ«shohen çdo dy muaj. Çdo degĂ« e rĂ«ndĂ«sishme do tĂ« mbĂ«shtetet pĂ«r njĂ« tremujor, pas sĂ« cilĂ«s do tĂ« formohen korrigjime pĂ«r eliminimin e dobĂ«sive pĂ«r tre vite e gjysmĂ« tĂ« tjera.

Puna për degën e re tani fillon pesë muaj para lëshimit të degës tjetër, dmth. në të njëjtën kohë me lëshimin e Python 3.9 nisën testimi alfa i degës Python 3.10. Dega Python 3.10 do të jetë në fazën e lëshimeve alfa për shtatë muaj, gjatë të cilëve do të shtohen mundësi të reja dhe do të bëhen korrigjime të gabimeve. Pas kësaj, për tre muaj do të zhvillohet testimi i versioneve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe gjithë vëmendja do t'i kushtohet korrigjimeve të gabimeve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshime, ku do të kryhet stabilizimi final.

Ndër të shtuar novitete në Python 3.9:

  • NĂ« fjalorĂ«t e pĂ«rcaktuar me klasĂ«n e brendshme dict, ka dalĂ« mbĂ«shtetje pĂ«r operatorĂ«t e bashkimit «|» dhe azhornimit «|=», tĂ« cilat plotĂ«sojnĂ« metodat {**d1, **d2} dhe dict.update, tĂ« propozuara mĂ« parĂ« pĂ«r tĂ« bashkuar fjalorĂ«t.

    >>> x = {"key1": "value1 nga x", "key2": "value2 nga x"}
    >>> y = {"key2": "value2 nga y", "key3": "value3 nga y"}

    >>> x | y
    {'key1': 'value1 nga x', 'key2': 'value2 nga y', 'key3': 'value3 nga y'}

    >>> y | x
    {'key2': 'value2 nga x', 'key3': 'value3 nga y', 'key1': 'value1 nga x'}

  • Koleksioni i brendshĂ«m i llojeve pĂ«rfshin list, dict dhe tuple, tĂ« cilat mund tĂ« pĂ«rdoren si lloje bazĂ« pa importim nga moduli typing. Pra, nĂ« vend tĂ« typing.List, typing.Dict dhe typing.Tuple tani mund tĂ« specifikohet
    thjesht list, dict dhe tuple:

    def greet_all(names: list[str]) -> None:
    për emër në names:
    print("Hello", emër)

  • Shtohen mjetet fleksibĂ«l pĂ«r anotimin e funksioneve dhe variablave. PĂ«r tĂ« lidhur anotimet, moduli typing ka shtuar njĂ« tip tĂ« ri Annotated, i cili zgjat llojet ekzistuese me metadita shtesĂ« qĂ« mund tĂ« pĂ«rdoren gjatĂ« analizĂ«s statike ose pĂ«r optimizimet gjatĂ« ekzekutimit. PĂ«r qasje nĂ« metadat nga kodi, metodĂ«s typing.get_type_hints() i Ă«shtĂ« shtuar parametri include_extras.

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

  • JanĂ« lehtĂ«suar KĂ«rkesat gramatikore pĂ«r dekoratorĂ«t — çdo shprehje e pĂ«rshtatshme pĂ«r pĂ«rdorim nĂ« blloqet if dhe while tani mund tĂ« pĂ«rdoret si dekorator. Ky ndryshim ka lejuar njĂ« pĂ«rmirĂ«sim tĂ« dukshĂ«m tĂ« lexueshmĂ«risĂ« sĂ« kodit PyQt5 dhe ka lehtĂ«suar mirĂ«mbajtjen e kĂ«tij moduli:

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

    Tani mund të shkruhet:
    @buttons[0].clicked.connect

  • NĂ« bibliotekĂ«n standarde Ă«shtĂ« shtuar moduli zoneinfo, duke pĂ«rfshirĂ« informacionin nga baza e orareve IANA.

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime, timedelta
    >>> # Koha verore
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo('America/Los_Angeles'))
    >>> print(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

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

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

  • Moduli graphlib Ă«shtĂ« shtuar, nĂ« tĂ« cilin Ă«shtĂ« implementuar pĂ«rkrahja pĂ«r renditjen topologjike tĂ« grafĂ«ve.
  • Propozuar metoda tĂ« reja pĂ«r tĂ« hequr prefikset dhe prapashtesat e vargjeve — str.removeprefix(prefix) dhe str.removesuffix(suffix). Metodat janĂ« shtuar nĂ« objektet str, bytes, bytearray dhe collections.UserString.

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

  • Aktivizohet parseri i ri PEG (Parsing Expression Grammar), qĂ« zĂ«vendĂ«soi parserin LL(1). PĂ«rdorimi i parserit tĂ« ri ka lejuar eliminimin e disa 'hakave' qĂ« pĂ«rdoren pĂ«r tĂ« kapĂ«rcyer kufizimet nĂ« LL(1) dhe ka ulur ndjeshĂ«m kostot e mirĂ«mbajtjes tĂ« parserit. NĂ« aspektin e performancĂ«s, parseri i ri Ă«shtĂ« nĂ« njĂ« nivel tĂ« ngjashĂ«m me atĂ« tĂ« mĂ«parshĂ«m, por e tejkalon atĂ« nĂ« fleksibilitet, duke lejuar njĂ« ndjesi mĂ« tĂ« lirĂ« nĂ« projektimin e mundĂ«sive tĂ« reja tĂ« gjuhĂ«s. Kodi i parserit tĂ« vjetĂ«r Ă«shtĂ« ende ruajtur dhe mund tĂ« rikthehet me ndihmĂ«n e flagut '-X oldparser' ose variablĂ«s mjedisore 'PYTHONOLDPARSER=1', por do tĂ« hiqet nĂ« publikimin 3.10.
  • U ofrua mundĂ«sia e aksesit tĂ« metodave tĂ« zgjatjeve nĂ« C nĂ« gjendjen e moduleve nĂ« tĂ« cilat ato janĂ« pĂ«rcaktuar, duke pĂ«rdorur dereferencimin e drejtpĂ«rdrejtĂ« tĂ« treguesve nĂ« vend tĂ« kĂ«rkimit tĂ« gjendjes sĂ« modulit me funksionin PyState_FindModule. Ky ndryshim lejon pĂ«rmirĂ«simin e performancĂ«s sĂ« moduleve nĂ« C duke ulur ose pĂ«rjashtuar plotĂ«sisht kostot e kontrollit tĂ« gjendjes sĂ« modulit. PĂ«r asociimin e modulit me klasĂ«n Ă«shtĂ« propozuar funksioni C PyType_FromModuleAndSpec(), pĂ«r tĂ« marrĂ« modul dhe gjendjen e tij janĂ« funksionet C PyType_GetModule() dhe PyType_GetModuleState(), dhe pĂ«r t'i dhĂ«nĂ« metodĂ«s akses nĂ« klasĂ«n nĂ« tĂ« cilĂ«n Ă«shtĂ« pĂ«rcaktuar, Ă«shtĂ« funksioni C PyCMethod dhe flagu METH_METHOD.
  • Koleksionuesi i plehrave i liruar nga bllokimit tĂ« koleksioneve qĂ« pĂ«rfshijnĂ« objekte tĂ« ringjallura, tĂ« cilat mbeten tĂ« aksesueshme edhe pas nisjes sĂ« finalizuesit.
  • Shtuar metoda os.pidfd_open, duke lejuar pĂ«rdorimin e nĂ«n-sistemit tĂ« bĂ«rthamĂ«s Linux "pidfd" pĂ«r tĂ« trajtuar situatĂ«n e ripĂ«rdorimit tĂ« PID (pidfd lidhet me njĂ« proces tĂ« caktuar dhe nuk ndryshon, ndĂ«rsa PID mund tĂ« lidhet me njĂ« proces tjetĂ«r pas pĂ«rfundimit tĂ« procesit aktual qĂ« lidhet me kĂ«tĂ« PID).
  • MbĂ«shtetje pĂ«r specifikimin Unicode Ă«shtĂ« pĂ«rditĂ«suar nĂ« versionin 13.0.0.
  • Eliminuar rrjedhja e memories nĂ« riparimin e interpretorit Python nĂ« njĂ« proces.
  • ËshtĂ« optimizuar performanca e tipeve tĂ« integruar range, tuple, set, frozenset, list dhe dict, e realizuar pĂ«rmes pĂ«rdorimit tĂ« protokollit tĂ« thirrjes sĂ« shpejtĂ« Vectorcall pĂ«r qasje mĂ« tĂ« shpejtĂ« nĂ« objekte tĂ« shkruara nĂ« gjuhĂ«n C.
  • Modulet _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time dhe _weakref janĂ« pĂ«rkthyer nĂ« ngarkim me Inicializimin nĂ« disa faza.
  • Modulet e bibliotekĂ«s standarde audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios dhe zlib janĂ« pĂ«rkthyer pĂ«r tĂ« pĂ«rdorur ABI tĂ« stabilizuar, e cila zgjidh problemin e funksionalitetit tĂ« ndĂ«rtimit tĂ« moduleve tĂ« zgjerimit pĂ«r versione tĂ« ndryshme tĂ« Python (nĂ« pĂ«rditĂ«simin e versionit nuk kĂ«rkohet ricompilimi i moduleve tĂ« zgjerimit, dhe modulet e ndĂ«rtuara pĂ«r 3.9 do tĂ« funksionojnĂ« nĂ« degĂ«n 3.10).
  • NĂ« modulin asyncio pĂ«r shkak tĂ« problemeve tĂ« mundshme me sigurinĂ« Ă«shtĂ« ndĂ«rprerĂ« mbĂ«shtetja pĂ«r parametrin reuse_address (pĂ«rdorimi i SO_REUSEADDR pĂ«r UDP nĂ« Linux lejon qĂ« procese tĂ« ndryshme tĂ« lidhin soketĂ«t dĂ«gjuese nĂ« portin UDP).
  • JanĂ« shtuar optimizime tĂ« reja, pĂ«r shembull, Ă«shtĂ« rritur performanca e trajtuesve tĂ« sinjaleve nĂ« aplikacione shumĂ«-fisnike, Ă«shtĂ« rritur shpejtĂ«sia e modulit subprocess nĂ« mjedisin FreeBSD dhe Ă«shtĂ« pĂ«rshpejtuar caktimi i variablave temporarĂ« (caktimi i njĂ« variabli nĂ« shprehjen "pĂ«r y nĂ« [expr]" tani nuk Ă«shtĂ« mĂ« i ngadaltĂ« se shprehja "y = expr"). NĂ« pĂ«rgjithĂ«si, shumica e testeve tregojnĂ« kanĂ« treguar njĂ« rĂ«nie tĂ« performancĂ«s nĂ« krahasim me degĂ«n 3.8 (pĂ«rshpejtimi vĂ«rehet vetĂ«m nĂ« testet write_local dhe write_deque):

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

    Qasja në leximin e variablave dhe karakteristikave:
    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
    lexo_clasvar_nga_clas 25.6 26.5 20.7 19.5 18.4 18.6
    lexo_clasvar_nga_instance 22.8 23.5 18.8 17.1 16.4 20.1
    lexo_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    lexo_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    lexo_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    lexo_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Qasje dhe qasje në atribut dhe variabël:
    lexo_local 8.7 9.3 5.5 5.3 4.3 4.2
    lexo_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    lexo_global 19.7 21.2 18.0 18.0 15.8 17.2
    lexo_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    lexo_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    lexo_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Qasje në strukturat e dhënash:
    lexo_list 24.2 24.5 20.8 20.8 19.0 21.1
    lexo_deque 24.7 25.5 20.2 20.6 19.8 21.6
    lexo_dict 24.3 25.7 22.3 23.0 21.0 22.5
    lexo_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Qasje në shkruaj si struktura të dhënash:
    lexo_list 27.1 28.5 22.5 21.6 20.0 21.6
    lexo_deque 28.7 30.1 22.7 21.8 23.5 23.2
    lexo_dict 31.4 33.3 29.3 29.2 24.7 27.8
    lexo_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Operacione në grumbuj (ose radhë):
    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

    Kohëzgjatja e ciklit:
    cikli_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Eliminuar ShumĂ« funksione dhe metoda Python 2.7, tĂ« cilat mĂ« parĂ« ishin shĂ«nuar si tĂ« braktisura dhe nĂ« lĂ«shimin e kaluar shkaktonin njĂ« paralajmĂ«rim DeprecationWarning, duke pĂ«rfshirĂ« metodĂ«n unescape() nĂ« html.parser.HTMLParser,
    tostring() dhe fromstring() në array.array, isAlive() në threading.Thread, getchildren() dhe getiterator() në ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() dhe base64.decodestring().

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster