Python 3.9 бағдарламалау тілінің шығарылымы

Бір жылдық дамудан кейін ұсынылды маңызды бағдарламалау тілінің шығарылымы Python 3.9. Python 3.9 кейінгі бірінші шығарылым болды көшу бойынша жоба жаңа цикл шығарылымдарды дайындау және қолдау. Жаңа негізгі шығарылымдар енді жылына бір рет жасалады, ал түзету жаңартулары екі ай сайын шығарылады. Әрбір маңызды салаға бір жарым жыл қолдау көрсетіледі, содан кейін осалдықтарды түзету үшін тағы үш жарым жыл әзірленеді.

Жаңа филиал бойынша жұмыс енді келесі филиалдың шығуына бес ай қалғанда басталады, яғни. Python 3.9 шығарылымымен сәйкес келеді басталды Python 3.10 филиалының альфа тестілеуі. Python 3.10 тармағы жеті ай бойы альфа шығарылымында болады, оның барысында жаңа мүмкіндіктер қосылады және қателер түзетіледі. Осыдан кейін бета-нұсқалар үш ай бойы сыналады, оның барысында жаңа мүмкіндіктерді қосуға тыйым салынады және қателерді түзетуге барлық назар аударылады. Шығаруға дейінгі соңғы екі айда филиал шығаруға үміткер сатысында болады, онда түпкілікті тұрақтандыру орындалады.

арасында қосылды инновациялар Python 3.9 нұсқасында:

  • Кірістірілген dict класы арқылы анықталған сөздіктерде, пайда болды «|» біріктіру операторларына қолдау көрсету және сөздіктерді біріктіру үшін бұрын ұсынылған {**d1, **d2} және dict.update әдістерін толықтыратын "|=" жаңартулары.

    >>> x = {"1-кілт": "x-дан 1-мән", "кілт2": "x-тен 2-мән"}
    >>> y = {"кілт2": "y-ден 2-мән", "3-кілт": "y-ден 3-мән"}

    >>> x | ж
    {'1-кілт': 'x-дан 1-мән', 'кілт2': 'y-дан 2-мән', '3-кілт': 'y-дан 3-мән'}

    >>> ж | x
    {'кілт2': 'x-дан 2-мән', '3-кілт': 'y-дан 3-мән', 'кілт1': 'x-дан 1-мән'}

  • Кірістірілген түрлер жиыны теру модулінен импорттаусыз негізгі түрлер ретінде пайдалануға болатын тізім, дикт және кортежді қамтиды. Анау. typing.List, typing.Dict және typing.Tuple орнына енді көрсетуге болады.
    жай ғана тізім, дикт және кортеж:

    def greet_all(аттар: тізім[str]) -> Ешбірі:
    есімдердегі атаулар үшін:
    басып шығару («Сәлеметсіз бе», аты)

  • қамтамасыз етілген функциялар мен айнымалыларды аннотациялауға арналған икемді құралдар. Аннотацияларды тіркеу үшін теру модуліне жаңа Аннотацияланған түрі қосылды, ол бар түрлерді статикалық талдау үшін немесе орындау уақытын оңтайландыру үшін пайдалануға болатын қосымша метадеректермен кеңейтеді. Кодтан метадеректерге қол жеткізу үшін include_extras параметрі typing.get_type_hints() әдісіне қосылды.

    charType = Аннотацияланған[int, ctype("char")] UnsignedShort = Аннотацияланған[int, struct2.ctype('H')]

  • Тоналды Декораторларға қойылатын грамматикалық талаптар – if және while блоктарында қолдануға жарамды кез келген өрнек енді декоратор ретінде пайдаланылуы мүмкін. Өзгеріс PyQt5 кодының оқылуын айтарлықтай жақсартты және осы модульге техникалық қызмет көрсетуді жеңілдетеді:

    Бұл:
    button_0 = түймелер[0] @button_0.clicked.connect

    Енді сіз жаза аласыз:
    @buttons[0].clicked.connect

  • Стандартты кітапханаға қосылды модуль аймақ ақпараты, ол IANA уақыт белдеуі дерекқорынан ақпаратты қамтиды.

    >>> Zoneinfo импорттаудан ZoneInfo
    >>> datetime импортынан datetime, timedelta
    >>> # Жаз мезгілі
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("Америка/Лос_Анджелес"))
    >>> басып шығару(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'ТЫНЫҚ МҰХИТЫНДАҒЫ ОҢТҮСТІК АМЕРИКА ЖАЗҒЫ УАҚЫТЫ'

    >>> # Стандартты уақыт
    >>> dt += timedelta(күн=7)
    >>> басып шығару(dt)
    2020-11-07 12:00:00-08:00

    >>> басып шығару(dt.tzname())
    PST

  • graphlib модулі қосылды, онда жүзеге асырылды графиктерді топологиялық сұрыптауды қолдау.
  • Ұсынылған префикстер мен жол соңын жоюдың жаңа әдістері - str.removeprefix(prefix) және str.removesuffix(suffix). Әдістер str, байт, байт массиві және коллекцияларға қосылды.UserString нысандары.

    >>> s = "FooBar"
    >>> s.removeprefix («Foo»)
    «Бар»

  • Қатысқан жаңа талдаушы PEG (Parsing Expression Grammar) талдаушыны ауыстырды LL(1). Жаңа талдаушыны пайдалану LL(1)-дегі шектеулерді айналып өту үшін қолданылатын кейбір «бұзулардан» құтылуға мүмкіндік берді және талдаушыға қызмет көрсетуге кететін еңбек шығындарын айтарлықтай азайтты. Өнімділік тұрғысынан жаңа талдаушы шамамен бұрынғымен бірдей деңгейде, бірақ икемділігі жағынан одан айтарлықтай озып кетті, бұл жаңа тіл мүмкіндіктерін жобалау кезінде өзін еркін сезінуге мүмкіндік береді. Ескі талдау коды әзірше сақталады және оны "-X oldparser" жалаушасы немесе "PYTHONOLDPARSER=1" айнымалы ортасы арқылы қайтаруға болады, бірақ 3.10 шығарылымында жойылады.
  • Берілген C кеңейтім әдістерінің PyState_FindModule функциясын пайдаланып модуль күйін іздеудің орнына тікелей көрсеткішті жою арқылы анықталған модульдердің күйіне қатынасу мүмкіндігі. Өзгеріс модуль күйін тексеруге жұмсалатын шығындарды азайту немесе толығымен жою арқылы C модульдерінің өнімділігін арттыруға мүмкіндік береді. Модульді сыныппен байланыстыру үшін C-функциясы PyType_FromModuleAndSpec() ұсынылады, модульді және оның күйін алу үшін, C-функциялары PyType_GetModule() және PyType_GetModuleState() ұсынылады және сыныпқа кіру әдісін қамтамасыз ету үшін онда ол анықталған, C-функциясы PyCMethod және METH_METHOD жалаушасы ұсынылған. .
  • Қоқыс жинаушы жеткізілген қорытындылаушы іске қосылғаннан кейін сыртқы қол жетімді болып қалатын реанимацияланған нысандарды қамтитын жинақтарды құлыптаудан.
  • Қосылған әдіс os.pidfd_open, бұл Linux ядросының "pidfd" ішкі жүйесін PID қайта пайдалану жағдайын өңдеу үшін пайдалануға мүмкіндік береді (pidfd белгілі бір процесспен байланысты және өзгермейді, ал PID сол PID-мен байланысты ағымдағы процесс аяқталғаннан кейін басқа процесспен байланыстырылуы мүмкін. ).
  • Юникод спецификациясын қолдау 13.0.0 нұсқасына жаңартылды.
  • Жойылған жадтың ағуы сол процесте Python аудармашысын қайта инициализациялау кезінде.
  • Кірістірілген түрлер ауқымы, кортеж, жиын, мұздатылған жиын, тізім және dict өнімділігі оңтайландырылған. жүзеге асырылды Си тілінде жазылған нысандарға жылдам қол жеткізу үшін Vectorcall таңбаша хаттамасын пайдалану арқылы.
  • _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, оператор, ресурс, уақыт және _weakref модульдері мына жерден жүктеледі бірнеше кезеңде инициализациялау.
  • Стандартты кітапхана модульдері audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios және zlib шектелген пайдалану үшін түрлендірілді. тұрақты ABI, бұл Python-ның әртүрлі нұсқалары үшін кеңейтім модульдерінің жинақтарының жұмыс қабілеттілігі мәселесін шешеді (нұсқаны жаңарту кезінде кеңейтім модульдерін қайта құрудың қажеті жоқ, ал 3.9 үшін құрастырылған модульдер 3.10 тармағында жұмыс істей алады).
  • Әлеуетті қауіпсіздік мәселелеріне байланысты асинсио модулі reuse_address параметріне қолдау көрсетуді ескірген (Linux жүйесінде UDP үшін SO_REUSEADDR пайдалану әртүрлі процестерге тыңдау ұяшықтарын UDP портына қосуға мүмкіндік береді).
  • Жаңа оңтайландырулар қосылды, мысалы, көп ағынды қолданбалардағы сигнал өңдеушілердің жақсартылған өнімділігі, FreeBSD ортасындағы ішкі процесс модулінің жылдамдығының жоғарылауы және уақытша айнымалыларды жылдамырақ тағайындау ([expr ]” енді “y = expr” “) өрнегі сияқты орындалады. Жалпы, көптеген сынақтар шоу 3.8 тармақпен салыстырғанда өнімділіктің төмендеуі (жылдамдық тек write_local және write_deque сынақтарында байқалады):

    Python нұсқасы 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Айнымалы және төлсипатты оқуға рұқсат:
    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
    сыныптан_оқу_сыныбы 25.6 26.5 20.7 19.5 18.4 18.6
    данадан_оқу_сыныбы 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

    Айнымалы және төлсипат жазу рұқсаты:
    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

    Деректер құрылымын оқуға рұқсат:
    оқу_тізімі 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
    оқылған_дикт 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

    Деректер құрылымын жазуға рұқсат:
    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

    Стек (немесе кезек) операциялары:
    list_apppend_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_apppend_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

    Уақыт циклі:
    цикл_үстеме 0.5 0.6 0.4 0.3 0.3 0.3

  • Жойылған html.parser.HTMLParser ішіндегі unescape() әдісін қоса, алдыңғы шығарылымда ескірген және DeprecationWarning әкелген көптеген Python 2.7 функциялары мен әдістері,
    tostring() және fromstring() array.array ішінде, isAlive() threading.Thread, getchildren() және getiterator() ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() және base64.decodestring().

Ақпарат көзі: opennet.ru

пікір қалдыру