Publikimi i gjuhës së programimit Python 3.9

Pas njĂ« vit zhvillimi Ă«shtĂ« paraqitur publikim i rĂ«ndĂ«sishĂ«m i gjuhĂ«s sĂ« programimit Python 3.9. Python 3.9 u bĂ« publikimi i parĂ« pas kalimit projekti nĂ« njĂ« cikĂ«l tĂ« ri tĂ« pĂ«rgatitjes dhe mbĂ«shtetjes sĂ« lĂ«shimeve. Publikimet 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Ă« periudhĂ« prej njĂ« viti e gjysmĂ«, pas sĂ« cilĂ«s do tĂ« formohen rregullime pĂ«r tĂ« pĂ«rballuar dobĂ«sitĂ« pĂ«r tre vjet e gjysmĂ« tĂ« tjera.

Puna mbi degën e re tani fillon pesë muaj përpara lëshimit të degës tjetër, dmth. në të njëjtën kohë me publikimin e Python 3.9 ka filluar 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ë korrigjohen gabimet. Pasi të kalojë kjo periudhë, për tre muaj do të kryhet testimi i lëshimeve beta, gjatë të cilit do të ndalohet shtimi i mundësive të reja dhe gjithë vëmendja do t'i kushtohet korrigjimit të gabimeve. Dy muajt e fundit para lëshimit, dega do të jetë në fazën e kandidatëve për lëshim, ku do të realizohet stabilizimi përfundimtar.

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

  • NĂ« fjalorĂ«t e pĂ«rcaktuar me klasĂ«n e ndĂ«rtuar dict, ka arritur mbĂ«shtetje pĂ«r operatorĂ«t e bashkimit «|» dhe pĂ«rditĂ«simit «|=», tĂ« cilĂ«t plotĂ«sojnĂ« metodat {**d1, **d2} dhe dict.update, tĂ« cilat mĂ« parĂ« janĂ« propozuar pĂ«r bashkimin e fjalorĂ«ve.

    >>> x = {«çelësi1»: «vlera1 nga x», «çelësi2»: «vlera2 nga x»}
    >>> y = {«çelësi2»: «vlera2 nga y», «çelësi3»: «vlera3 nga y»}

    >>> x | y
    {‘çelĂ«si1’: ‘vlera1 nga x’, ‘çelĂ«si2’: ‘vlera2 nga y’, ‘çelĂ«si3’: ‘vlera3 nga y’}

    >>> y | x
    {‘çelĂ«si2’: ‘vlera2 nga x’, ‘çelĂ«si3’: ‘vlera3 nga y’, ‘çelĂ«si1’: ‘vlera1 nga x’}

  • Koleksioni i llojeve tĂ« integruara pĂ«rfshin listĂ«n, fjalorin dhe tuple, tĂ« cilat mund tĂ« pĂ«rdoren si lloje bazĂ« pa u importuar nga moduli typing. Pra, nĂ« vend tĂ« typing.List, typing.Dict dhe typing.Tuple tani mund tĂ« specifikoni
    thjesht listë, fjalor dhe tuple:

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

  • TĂ« ofruara mjetet fleksibile pĂ«r annotimin e funksioneve dhe variablave. PĂ«r tĂ« bashkangjitur annotimet, nĂ« modulin typing Ă«shtĂ« shtuar njĂ« lloj i ri Annotated, qĂ« zgjerohet me metadaten ekzistuese, tĂ« cilat mund tĂ« pĂ«rdoren gjatĂ« analizĂ«s statike ose pĂ«r optimizime gjatĂ« ekzekutimit. PĂ«r tĂ« hyrĂ« nĂ« metadatĂ«n nga kodi, nĂ« metodĂ«n typing.get_type_hints() Ă«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 t'u pĂ«rdorur 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 nĂ« PyQt5 dhe ka thjeshtĂ«suar mirĂ«mbajtjen e kĂ«tij moduli:

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

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

  • NĂ« bibliotekĂ«n standarde u shtua moduli zoneinfo, duke pĂ«rfshirĂ« informacion nga baza e zona tĂ« kohĂ«s IANA.

    >>> from zoneinfo import ZoneInfo
    >>> from datetime import datetime, timedelta
    >>> # Koha veror
    >>> 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Ă« realizuar mbĂ«shtetet renditja topologjike e grafĂ«ve.
  • Propozohet metoda tĂ« reja pĂ«r heqjen e prefikseve dhe sufikseve tĂ« 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’

  • ËshtĂ« angazhuar njĂ« parser i ri PEG (Gramatika e Shprehjes sĂ« AnalizĂ«s), e cila zĂ«vendĂ«soi parserin LL(1). PĂ«rdorimi i parser-it tĂ« ri lehtĂ«soi eliminimin e disa «hack-Ă«ve» qĂ« ishin pĂ«rdorur pĂ«r tĂ« anashkaluar kufizimet nĂ« LL(1), dhe ndjeshĂ«m ulĂ«n kostot e miratimit tĂ« parser-it. NĂ« aspektin e performancĂ«s, parser-i i ri Ă«shtĂ« afĂ«rsisht nĂ« tĂ« njĂ«jtin nivel me tĂ« kaluarin, por e ka tejkaluar atĂ« nĂ« aspektin e fleksibilitetit, qĂ« lejon njĂ« ndjesi mĂ« tĂ« lirĂ« gjatĂ« projektimit tĂ« mundĂ«sive tĂ« reja tĂ« gjuhĂ«s. Kodi i parser-it tĂ« vjetĂ«r Ă«shtĂ« ende ruajtur dhe mund tĂ« rikthehet me ndihmĂ«n e flagut «-X oldparser» ose variablĂ«s sĂ« ambientit «PYTHONOLDPARSER=1», por do tĂ« fshihet nĂ« versionin 3.10.
  • E ofruar mundĂ«si pĂ«r qasje tĂ« metodave tĂ« zgjerimeve C nĂ« gjendjen e moduleve ku ato janĂ« pĂ«rcaktuar, duke pĂ«rdorur dereferencimin e drejtpĂ«rdrejtĂ« tĂ« treguesve nĂ« vend tĂ« kĂ«rkimit tĂ« gjendjes sĂ« modulit me anĂ« tĂ« funksionit PyState_FindModule. Ky ndryshim lejon pĂ«rmirĂ«simin e performancĂ«s tĂ« moduleve nĂ« C duke ulur ose eliminuar plotĂ«sisht shpenzimet administrative pĂ«r kontrollin e gjendjes sĂ« modulit. PĂ«r tĂ« asociuar modulit me njĂ« klasĂ« Ă«shtĂ« propozuar funksioni C PyType_FromModuleAndSpec(), pĂ«r tĂ« marrĂ« modulit dhe gjendjen e tij funksionet C PyType_GetModule() dhe PyType_GetModuleState(), dhe pĂ«r tĂ« siguruar njĂ« metodĂ« aksesit nĂ« klasĂ«n nĂ« tĂ« cilĂ«n Ă«shtĂ« pĂ«rcaktuar, funksioni C PyCMethod dhe flagu METH_METHOD.
  • Grumbulluesi i mbeturinave i liruar nga bllokimi i koleksioneve qĂ« pĂ«rfshijnĂ« objekte tĂ« ringjallura, tĂ« cilat mbeten tĂ« aksesueshme nga jashtĂ« pas ekzekutimit tĂ« finalizatorit.
  • Metoda e re os.pidfd_open, qĂ« lejon pĂ«rdorimin e nĂ«nshkallĂ«s sĂ« bĂ«rthamĂ«s Linux "pidfd" pĂ«r trajtimin e situatave me ripĂ«rdorimin e PID (pidfd lidhet me njĂ« proces specifik dhe nuk ndryshon, ndĂ«rsa PID mund tĂ« lidhet me njĂ« proces tjetĂ«r pas pĂ«rfundimit tĂ« procesit aktual qĂ« Ă«shtĂ« asociuar me kĂ«tĂ« PID).
  • MbĂ«shtetje pĂ«r specifikimin Unicode Ă«shtĂ« azhurnuar nĂ« versionin 13.0.0.
  • ËshtĂ« eliminuar shpenzim memorjeje kur rinitializohet interpretuese Python nĂ« njĂ« proces.
  • Optimizimi i performancĂ«s sĂ« tipeve tĂ« integruar range, tuple, set, frozenset, list dhe dict, i realizuar nĂ«pĂ«rmjet aplikimit 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Ă« Azhurnuar pĂ«r t'u ngarkuar me initializimin nĂ« disa faza.
  • Modulet e bibliotekĂ«s standarde audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios dhe zlib janĂ« Azhurnuar pĂ«r tĂ« pĂ«rdorur ABI tĂ« kufizuar, i cili zgjidh problemin e funksionimit tĂ« ndĂ«rtimeve tĂ« moduleve tĂ« zgjerimeve pĂ«r versione tĂ« ndryshme Python (me pĂ«rditĂ«simin e versionit nuk kĂ«rkohet qĂ« tĂ« rindĂ«rtohen modulet e zgjerimeve, dhe modulet e ndĂ«rtuara pĂ«r 3.9, do tĂ« mund tĂ« funksionojnĂ« nĂ« degĂ«n 3.10).
  • NĂ« modulın 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Ă« lidhen me soket tĂ« dĂ«gjimit nĂ« UDP-port).
  • JanĂ« shtuar optimizime tĂ« reja, pĂ«r shembull, Ă«shtĂ« rritur performanca e menaxherĂ«ve tĂ« sinjaleve nĂ« aplikacionet multithread, Ă«shtĂ« rritur shpejtĂ«sia e modulit subprocess nĂ« mjedisin FreeBSD dhe Ă«shtĂ« pĂ«rshpejtuar caktimi i variablave tĂ« pĂ«rkohshĂ«m (caktimi i variablit nĂ« shprehjen «for y in [expr]» tani nuk Ă«shtĂ« mĂ« i ngadaltĂ« se shprehja «y = expr»). NĂ« pĂ«rgjithĂ«si, shumica e testeve tregojnĂ« rĂ«nien e performancĂ«s krahasuar 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
    ————— — — — — — —

    Aksesimi i variablave dhe atributëve:
    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

    Aksesimi për shkrimin e variablave dhe atributëve:
    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
    shkruaj_global 19.7 21.2 18.0 18.0 15.8 17.2
    shkruaj_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    shkruaj_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    shkruaj_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Qasje në strukturat e të dhënave:
    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ë strukturat e të dhënave për shkrim:
    shkruaj_list 27.1 28.5 22.5 21.6 20.0 21.6
    shkruaj_deque 28.7 30.1 22.7 21.8 23.5 23.2
    shkruaj_dict 31.4 33.3 29.3 29.2 24.7 27.8
    shkruaj_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Operacione me stivë (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

    Matja e ciklit:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Fshihen mjaft funkcione dhe metoda Python 2.7, tĂ« cilat mĂ« parĂ« ishin shĂ«nuar si tĂ« vjetĂ«ruara dhe nĂ« lĂ«shimin e kaluar shkaktuan njĂ« paralajmĂ«rim DeprecationWarning, 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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster