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 маани'}

    >>> y | x
    {'ачкыч2': 'x'ден маани2', 'ачкыч3': 'y'ден 3 маани', 'ачкыч1': 'x'ден 1 маани'}

  • Типтердин камтылган коллекциясы тизме, дикт жана кортежди камтыйт, аларды терүү модулунан импорттоосуз базалык типтер катары колдонууга болот. Ошол. typing.List, typing.Dict жана typing.Tupleдин ордуна сиз азыр белгилей аласыз
    жөн гана тизме, дикт жана кортеж:

    def greet_all(names: list[str]) -> None:
    ысымдар үчүн:
    print("Салам", аты)

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

    charType = Annotated[int, ctype(«char»)] UnsignedShort = Annotated[int, struct2.ctype(‘H’)]

  • Тондоду жасалгалоочуларга грамматикалык талаптар - if and while блокторуна колдонууга ылайыктуу ар кандай сөз айкаштары эми жасалгалоочу катары колдонулушу мүмкүн. Өзгөртүү PyQt5 кодунун окууга жөндөмдүүлүгүн кыйла жакшыртты жана бул модулдун тейлөөсүн жөнөкөйлөттү:

    Ал эле:
    button_0 = buttons[0] @button_0.clicked.connect

    Эми сиз жаза аласыз:
    @buttons[0].clicked.connect

  • Стандарттык китепканага кошулду модулу zoneinfo, 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()
    'PDT'

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

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

  • Кошулган graphlib модулу, анын ичинде ишке ашырылган графиктерди топологиялык сорттоо үчүн колдоо.
  • Сунушталган префикстерди жана саптын аягына чыгаруунун жаңы ыкмалары - str.removeprefix(prefix) жана str.removesuffix(suffix). Методдор str, bytes, bytearray жана collections.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 котормочу кайра инициализациялоодо.
  • Камтылган типтердин диапазону, кортеж, топтом, тоңдурулган топтом, тизме жана дикттин иштеши оптималдаштырылды. ишке ашырылган C тилинде жазылган объекттерге тезирээк жетүү үчүн 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
    ————— — — — — — —

    Өзгөрмө жана атрибуттарды окуу мүмкүнчүлүгү:
    окуу_жергиликтүү 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
    окуу_курулган 21.1 21.6 18.5 19.0 7.5 7.7
    класстан_окуу 25.6 26.5 20.7 19.5 18.4 18.6
    Окуу_классы_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

    Өзгөрмө жана атрибут жазуу мүмкүнчүлүгү:
    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

    Маалымат түзүмүн жазуу мүмкүнчүлүгү:
    жазуу_тизме 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_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

    Убакыт цикли:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Өчүрүлдү көптөгөн Python 2.7 функциялары жана ыкмалары, алар мурда эскирилген жана мурунку чыгарылышта DeprecationWarning алып келген, анын ичинде html.parser.HTMLParser ичиндеги unescape() ыкмасы,
    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().

Source: opennet.ru

Комментарий кошуу