Kutolewa kwa lugha ya programu ya Python 3.9

Baada ya mwaka wa maendeleo imewasilishwa kutolewa kwa lugha ya programu muhimu Python 3.9. Python 3.9 ilikuwa toleo la kwanza baada ya mpito mradi juu mzunguko mpya maandalizi na usaidizi wa matoleo. Matoleo mapya makubwa sasa yatatolewa mara moja kwa mwaka, na masasisho ya marekebisho yatatolewa kila baada ya miezi miwili. Kila tawi muhimu litasaidiwa kwa mwaka mmoja na nusu, baada ya hapo miaka mingine mitatu na nusu itaendelezwa ili kurekebisha udhaifu.

Kazi kwenye tawi jipya sasa huanza miezi mitano kabla ya kutolewa kwa tawi linalofuata, i.e. sanjari na kutolewa kwa Python 3.9 ilianza majaribio ya alpha ya tawi la Python 3.10. Tawi la Python 3.10 litakuwa katika toleo la alpha kwa miezi saba, wakati ambapo vipengele vipya vitaongezwa na hitilafu kurekebishwa. Baada ya hayo, matoleo ya beta yatajaribiwa kwa miezi mitatu, wakati ambapo kuongeza vipengele vipya itakuwa marufuku na tahadhari zote zitalipwa kwa kurekebisha mende. Miezi miwili ya mwisho kabla ya kuachiliwa, tawi litakuwa katika hatua ya mgombea kuachiliwa, ambapo uimarishaji wa mwisho utafanywa.

Miongoni mwa aliongeza ubunifu katika Python 3.9:

  • Katika kamusi zilizofafanuliwa kwa kutumia darasa la dict iliyojengwa, alionekana msaada kwa kuunganisha waendeshaji "|" na "|=" masasisho, yanayosaidia {**d1, **d2} na dict.sasisha mbinu zilizopendekezwa hapo awali za kuunganisha kamusi.

    >>> x = {"key1": "thamani1 kutoka kwa x", "key2": "thamani2 kutoka x"}
    >>> y = {"key2": "thamani2 kutoka y", "key3": "thamani3 kutoka y"}

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

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

  • Mkusanyiko uliojumuishwa wa aina unajumuisha orodha, dict, na tuple, ambazo zinaweza kutumika kama aina za msingi bila kuleta kutoka kwa moduli ya kuandika. Wale. badala ya kuandika.List, typing.Dict na typing.Tuple sasa unaweza kubainisha
    orodha tu, dict na tuple:

    def greet_all(majina: list[str]) -> Hakuna:
    kwa majina katika majina:
    chapa ("Hujambo", jina)

  • Zinatolewa zana zinazonyumbulika za vitendaji na vigeu vya kubainisha. Kwa kuambatisha vidokezo, aina mpya ya Ufafanuzi imeongezwa kwenye moduli ya kuandika, ikipanua aina zilizopo na metadata ya ziada inayoweza kutumika kwa uchanganuzi tuli au uboreshaji wa muda unaotumika. Ili kufikia metadata kutoka kwa msimbo, kigezo cha include_extras kimeongezwa kwenye mbinu ya typing.get_type_hints().

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

  • Imepigwa chini mahitaji ya kisarufi kwa wapambaji - usemi wowote unaofaa kutumika katika ikiwa na wakati vitalu sasa vinaweza kutumika kama kipambo. Mabadiliko hayo yaliboresha sana usomaji wa msimbo wa PyQt5 na kurahisisha udumishaji wa moduli hii:

    Ilikuwa:
    button_0 = vitufe[0] @button_0.clicked.connect

    Sasa unaweza kuandika:
    @buttons[0].clicked.connect

  • Kwa maktaba ya kawaida imeongezwa moduli eneo, ambayo inajumuisha taarifa kutoka kwa hifadhidata ya saa za eneo la IANA.

    >>> kutoka kwa zoneinfo import ZoneInfo
    >>> kutoka tarehe ya kuagiza ya wakati, timedelta
    >>> # Majira ya joto
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> chapisha(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Muda wa kawaida
    >>> dt += timedelta(siku=7)
    >>> chapisha(dt)
    2020-11-07 12:00:00-08:00

    >>> chapisha(dt.tzname())
    PST

  • Imeongeza moduli ya graphlib, ambayo kutekelezwa msaada kwa upangaji wa kitopolojia wa grafu.
  • Imependekezwa mbinu mpya za kuondoa viambishi awali na miisho ya mstari - str.removeprefix(kiambishi awali) na str.remove suffix(kiambishi). Mbinu zimeongezwa kwa str, byte, bytearray na collections.UserString vitu.

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

  • Husika mchanganuzi mpya Kigingi (Parsing Expression Grammar), ambayo ilibadilisha kichanganuzi LL(1). Utumiaji wa kichanganuzi kipya ulifanya iwezekane kuondoa baadhi ya "haki" zilizotumiwa kupitisha vizuizi katika LL(1), na kupunguza kwa kiasi kikubwa gharama za kazi za kudumisha kichanganuzi. Kwa upande wa utendakazi, kichanganuzi kipya kiko kwenye kiwango sawa na kile cha awali, lakini kiko mbele yake kwa kiasi kikubwa katika suala la kubadilika, ambayo hukuruhusu kujisikia huru zaidi unapounda vipengele vya lugha mpya. Nambari ya zamani ya kichanganuzi imehifadhiwa kwa sasa na inaweza kurejeshwa kwa kutumia alama ya "-X oldparser" au utofauti wa mazingira wa "PYTHONOLDPARSER=1", lakini itaondolewa katika toleo la 3.10.
  • Zinazotolewa uwezo wa mbinu za upanuzi wa C kufikia hali ya moduli ambamo zimefafanuliwa kwa kutumia rejeleo la kielekezi la moja kwa moja badala ya kutafuta hali ya moduli kwa kutumia kitendakazi cha PyState_FindModule. Mabadiliko hukuruhusu kuongeza utendakazi wa moduli za C kwa kupunguza au kuondoa kabisa juu ya kuangalia hali ya moduli. Ili kuhusisha moduli na darasa, C-function PyType_FromModuleAndSpec() inapendekezwa, ili kupata moduli na hali yake, C-functions PyType_GetModule() na PyType_GetModuleState() zinapendekezwa, na kutoa mbinu ya kufikia darasa. ambamo imefafanuliwa, PyCMethod ya kazi ya C na bendera ya METH_METHOD zinapendekezwa. .
  • Mkusanyaji taka mikononi kutoka kwa mikusanyiko ya kufunga iliyo na vitu vilivyohuishwa ambavyo husalia kufikiwa nje baada ya kikamilishaji kukimbia.
  • Mbinu iliyoongezwa os.pidfd_fungua, ambayo inaruhusu mfumo mdogo wa Linux kernel "pidfd" kutumika kushughulikia hali ya utumiaji tena wa PID (pidfd inahusishwa na mchakato maalum na haibadilika, wakati PID inaweza kuhusishwa na mchakato mwingine baada ya mchakato wa sasa unaohusishwa na PID hiyo kuisha. )
  • Usaidizi wa vipimo vya Unicode umesasishwa hadi toleo la 13.0.0.
  • Imeondolewa uvujaji wa kumbukumbu wakati wa kuanzisha tena mkalimani wa Python katika mchakato huo huo.
  • Utendaji wa aina zilizojumuishwa ndani, tuple, seti, seti zisisonge, orodha na dict imeboreshwa. kutekelezwa kupitia matumizi ya itifaki ya njia ya mkato ya Vectorcall kwa ufikiaji wa haraka wa vitu vilivyoandikwa kwa lugha ya C.
  • Moduli _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, rasilimali, muda na _weakref hupakiwa kutoka uanzishaji katika hatua kadhaa.
  • Moduli za kawaida za maktaba audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios na zlib zimebadilishwa ili kutumia vikwazo. ABI imara, ambayo hutatua tatizo la utendakazi wa makusanyiko ya moduli za upanuzi kwa matoleo tofauti ya Python (wakati wa kusasisha toleo, hakuna haja ya kujenga upya moduli za upanuzi, na moduli zilizokusanywa kwa 3.9 zitaweza kufanya kazi katika tawi la 3.10).
  • Sehemu ya asyncio imeacha kutumia kigezo cha reuse_address kutokana na matatizo yanayoweza kutokea ya usalama (kutumia SO_REUSEADDR kwa UDP kwenye Linux huruhusu michakato tofauti kuambatisha soketi za kusikiliza kwenye mlango wa UDP).
  • Uboreshaji mpya umeongezwa, kwa mfano, utendakazi ulioboreshwa wa vidhibiti vya mawimbi katika programu-tumizi zenye nyuzi nyingi, kasi iliyoongezeka ya moduli ndogo katika mazingira ya FreeBSD, na ugawaji wa haraka wa viambajengo vya muda (kukabidhi kutofautisha katika usemi "kwa y katika [expr ]” sasa ni mtendaji kama usemi β€œy = expr” "). Kwa ujumla, vipimo vingi onyesha kupungua kwa utendaji ikilinganishwa na tawi la 3.8 (kasi huzingatiwa tu katika majaribio ya kuandika_ya ndani na kuandika_deque):

    Toleo la chatu 3.4 3.5 3.6 3.7 3.8 3.9
    β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

    Ufikiaji wa kigezo na sifa ya kusoma:
    soma_ndani 7.1 7.1 5.4 5.1 3.9 4.0
    soma_isiyo ya kawaida 7.1 8.1 5.8 5.4 4.4 4.8
    soma_dunia 15.5 19.0 14.3 13.6 7.6 7.7
    soma_iliyojengwa 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
    soma_mfano 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
    soma_jina-tuple 73.8 57.5 45.0 46.8 18.4 23.2
    soma_njia ya mipaka 37.6 37.9 29.6 26.9 27.7 45.9

    Ufikiaji wa uandishi unaobadilika na sifa:
    kuandika_ndani 8.7 9.3 5.5 5.3 4.3 4.2
    kuandika_isiyo ya kawaida 10.5 11.1 5.6 5.5 4.7 4.9
    kuandika_kimataifa 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
    andika_mfano 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

    Ufikiaji wa usomaji wa muundo wa data:
    soma_orodha 24.2 24.5 20.8 20.8 19.0 21.1
    soma_deque 24.7 25.5 20.2 20.6 19.8 21.6
    soma_amri 24.3 25.7 22.3 23.0 21.0 22.5
    soma_amri 22.6 24.3 19.5 21.2 18.9 21.6

    Ufikiaji wa uandishi wa muundo wa data:
    andika_orodha 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
    kuandika_dict 31.4 33.3 29.3 29.2 24.7 27.8
    andika_mgawo 28.4 29.9 27.5 25.2 23.1 29.8

    Operesheni za mrundikano (au foleni):
    list_ongeza_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

    Mzunguko wa muda:
    kitanzi_juu 0.5 0.6 0.4 0.3 0.3 0.3

  • Imeondolewa utendakazi na mbinu nyingi za Python 2.7 ambazo hapo awali ziliacha kutumika na kusababisha Onyo la Kuacha Kutumika katika toleo lililopita, ikijumuisha unescape() mbinu katika html.parser.HTMLParser,
    tostring() na fromstring() katika array.array, isAlive() katika threading.Thread, getchildren() na getiterator() katika ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() na base64.decodestring().

Chanzo: opennet.ru

Kuongeza maoni