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

Бір жарым жылдан кейін даму ұсынылды негізгі бағдарламалау тілінің шығарылымы Python 3.8. Python 3.8 тармағына арналған түзету жаңартулары жоспарланған 18 ай ішінде босату. Маңызды осалдықтар 5 жылдың қазан айына дейін 2024 жылға түзетіледі. 3.8 тармағына арналған түзету жаңартулары екі ай сайын шығарылады, Python 3.8.1 бірінші түзетуші шығарылымы желтоқсанға жоспарланған.

Қосылғандардың ішінде инновациялар:

  • қолдау күрделі өрнектер ішіндегі тағайындау операциялары. Жаңа «:=» операторының көмегімен басқа өрнектердің ішінде мән тағайындау операцияларын орындауға болады, мысалы, шартты операторларда және циклдарды анықтау кезінде қосарлы функция шақыруларын болдырмау үшін:

    егер (n := len(a)) > 10:
    ...

    while (блок := f.read(256)) != ":
    ...

  • қолдау функция аргументтерін көрсетуге арналған жаңа синтаксис. Функцияны анықтау кезінде аргументтерді санау кезінде, енді тағайындалуы мүмкін аргументтерден функцияны шақыру кезінде мәндердің санау ретіне негізделген мәндерді ғана тағайындауға болатын аргументтерді бөлу үшін «/» белгісін көрсетуге болады. кез келген ретпен (айнымалы = мән синтаксисі) ). Практикалық жағынан, жаңа мүмкіндік Python-дағы функцияларға C тіліндегі бар функциялардың әрекетін толығымен эмуляциялауға, сондай-ақ, мысалы, болашақта параметр атауын өзгерту жоспарланса, белгілі бір атаулармен байланыстыруды болдырмауға мүмкіндік береді.

    «/» жалауы «айнымалы=мән» пішіміндегі тағайындау ғана қолданылатын айнымалы мәндерді бөліп, бұрын қосылған «*» жалауын толықтырады. Мысалы, «def f(a, b, /, c, d, *, e, f):» функциясында «a» және «b» айнымалылары мәндер тізімделген ретпен ғана тағайындалуы мүмкін. ,
    «e» және «f» айнымалылары, тек «айнымалы=мән» тағайындау арқылы және «c» және «d» айнымалылары келесі жолдардың кез келгенінде:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Қосылды жаңа C API
    барлығын толық басқаруға мүмкіндік беретін Python баптандыру параметрлерін конфигурациялау конфигурация және қателерді өңдеудің кеңейтілген құралдарын қамтамасыз ету. Ұсынылған API Python аудармашы функционалдығын басқа C қолданбаларына ендіруді жеңілдетеді;

  • Орындалды Си тілінде жазылған нысандарға жылдам қол жеткізу үшін жаңа Vectorcall протоколы. CPython 3.8 нұсқасында Vectorcall қызметіне кіру әлі де ішкі пайдаланумен шектелген, жалпыға қолжетімді API санатына көшу CPython 3.9 нұсқасында жоспарланған;
  • Қосылды орындалған әрекеттерді тексеру үшін сценарийдің орындалу барысы туралы төмен деңгейлі ақпаратқа қол жеткізуді қамтамасыз ететін Python тіліндегі қолданбалар мен фреймворктарды қамтамасыз ететін Runtime Audit Hooks қызметіне қоңырау шалады (мысалы, модульдердің импортын, файлдарды ашуды, ізді пайдаланып, желілік розеткаларға қол жеткізу, exec, eval және run_mod арқылы кодты іске қосу);
  • Модульде тұзды қамтамасыз етілген нысандарды сериялау және сериядан шығару үшін пайдаланылатын Pickle 5 протоколын қолдау. Pickle жадты көшіру операцияларының санын азайту және деректерді арнайы қысу алгоритмдерін пайдалану сияқты қосымша оңтайландыру әдістерін қолдану арқылы көп ядролы және көп түйінді конфигурациялардағы Python процестері арасында деректердің үлкен көлемін тасымалдауды оңтайландыруға мүмкіндік береді. Хаттаманың бесінші нұсқасы деректерді негізгі тұздық ағынынан бөлек жіберуге болатын жолақтан тыс беру режимін қосуымен ерекшеленеді.
  • Әдепкі бойынша, Pickle протоколының төртінші нұсқасы іске қосылады, ол бұрын әдепкі бойынша ұсынылған үшінші нұсқамен салыстырғанда жоғары өнімділікке және жіберілетін деректердің көлемін азайтуға мүмкіндік береді;
  • Модульде теру Бірнеше жаңа мүмкіндіктер енгізілді:
    • Класс TypedDict типтегі ақпарат кілттермен байланысты деректер үшін анық көрсетілген ассоциативті массивтер үшін («TypedDict('Point2D', x=int, y=int, label=str)”).
    • Түрі Қарапайым, ол параметрді шектеуге немесе мәнді бірнеше алдын ала анықталған мәндерге қайтаруға мүмкіндік береді («Литераль['қосылған', 'ажыратылған']»).
    • Дизайн»Қорытынды«, бұл өзгертілмейтін немесе қайта тағайындалмайтын айнымалылардың, функциялардың, әдістер мен сыныптардың мәндерін анықтауға мүмкіндік береді («pi: Final[float] = 3.1415926536»).
  • Жеке FS ағашында сақталған және коды бар каталогтардан бөлінген байт-коды бар құрастырылған файлдарға кэш тағайындау мүмкіндігі қосылды. Байткоды бар файлдарды сақтау жолы айнымалы арқылы орнатылады PYTHONPYCACHEPREFIX немесе "-X pycache_prefix" опциясы;
  • Орындалды SI тілінде жазылған, тұрақты шығарылымдар үшін құрастырылған кеңейтімдерді түзету құрылымдарында жүктеуге мүмкіндік беретін шығарылыммен бірдей ABI пайдаланатын Python түзеткіштерінің жөндеу құрастыруларын жасау мүмкіндігі;
  • f-жолдары («f» префиксімен пішімделген литералдар) = операторына қолдау көрсетеді (мысалы, «f'{expr=}'»), бұл оңай түзету үшін өрнекті мәтінге түрлендіруге мүмкіндік береді. Мысалы:

    ››› пайдаланушы = 'eric_idle'
    ››› мүше_бері = күні (1975, 7, 31)
    ››› f'{user=} {member_since=}'
    "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

  • Өрнек «жалғастыру» блок ішінде пайдалануға рұқсат етілген соңында;
  • Жаңа модуль қосылды multiprocessing.shared_memory, көппроцесстік конфигурацияларда ортақ жад сегменттерін пайдалануға мүмкіндік беру;
  • Windows платформасында асинцио іске асыру сыныпты пайдалану үшін жылжытылды ProactorEventLoop;
  • LOAD_GLOBAL нұсқауының өнімділігі жаңа нысан кодын кэштеу механизмін пайдалану есебінен шамамен 40%-ға артты.

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

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