Python 3.11 программалоо тилинин чыгарылышы

Бир жылдык өнүгүүдөн кийин Python 3.11 программалоо тилинин олуттуу релизи жарык көрдү. Жаңы филиал бир жарым жыл колдоого алынат, андан кийин ал үчүн дагы үч жарым жыл бою алсыздыктары бар тактар ​​түзүлөт.

Ошол эле учурда, Python 3.12 бутагынын альфа тестирлөөсү башталды (жаңы иштеп чыгуу графигине ылайык, жаңы филиалда иштөө мурунку филиалдын чыгышына беш ай калганда башталып, кийинки чыгарылыш учурунда альфа тестирлөө стадиясына жетет. ). Python 3.12 бутагы жети ай бою альфа-релиздерде болот, анын жүрүшүндө жаңы функциялар кошулуп, мүчүлүштүктөр оңдолот. Андан кийин бета версиялары үч ай бою сыналат, анын жүрүшүндө жаңы функцияларды кошууга тыюу салынат жана бардык көңүл мүчүлүштүктөрдү оңдоого бурулат. Чыгарылганга чейин акыркы эки ай, бутак акыркы турукташтыруу аткарылат бошотуу талапкер стадиясында болот.

Python 3.11 жаңы толуктоолор камтыйт:

  • Ишти оптималдаштыруу боюнча олуттуу иштер аткарылды. Жаңы бутак тездетүүгө жана функциялык чалууларды сапта жайгаштырууга, стандарттык операциялардын тез котормочуларын колдонууга байланыштуу өзгөртүүлөрдү камтыйт (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), ошондой эле Cinder жана HotPy долбоорлору тарабынан даярдалган оптималдаштыруу. Жүктүн түрүнө жараша коддун аткарылышынын ылдамдыгы 10-60% га өсөт. Орточо алганда, pyperformance тест топтомундагы көрсөткүчтөр 25% га өскөн.

    Байткодду кэштөө механизми кайра иштелип чыкты, бул котормочунун ишке киргизүү убактысын 10-15% га кыскартты. Коду жана байткоду бар объекттер эми интерпретатор тарабынан статикалык түрдө бөлүштүрүлөт, бул кэштен алынган байт-кодду ажыратуу жана динамикалык эстутумга жайгаштыруу үчүн коду бар объекттерди конвертациялоо этаптарын жоюуга мүмкүндүк берди.

  • Диагностикалык билдирүүлөрдөгү чалуулардын издерин көрсөтүүдө, эми катаны пайда кылган туюнтма жөнүндө маалыматты көрсөтүүгө болот (мурда линиянын кайсы бөлүгү катага себеп болгонун деталдаштырбастан, сызык гана өзгөчөлөнгөн). Кеңейтилген трек маалыматын API аркылуу да алууга болот жана codeobject.co_positions() ыкмасын же C API функциясын PyCode_Addr2Location() аркылуу баштапкы коддун белгилүү бир позициясына жеке байт код нускамаларын картага түшүрүү үчүн колдонсо болот. Өзгөртүү уя салынган сөздүк объектилери, бир нече функция чалуулары жана татаал арифметикалык туюнтмалар менен көйгөйлөрдү оңдоону бир топ жеңилдетет. Traceback (эң акыркы чалуу): "calculation.py" файлы, 54-сап, натыйжада = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: нөлгө бөлүнүү
  • Программага бир эле учурда бир нече түрдүү өзгөчөлүктөрдү жаратып, иштетүү мүмкүнчүлүгүн берип, өзгөчө топторго колдоо кошулду. Бир нече бөтөнчөлүктөрдү топтоп, аларды чогуу көтөрүү үчүн, ExceptionGroup жана BaseExceptionGroup жаңы өзгөчө кырдаалдардын түрлөрү сунушталды жана топтун айрым өзгөчөлүктөрүн бөлүп көрсөтүү үчүн “экспекция*” туюнтмасы кошулду.
  • add_note() методу BaseException классына кошулду, ал сизге өзгөчө учурга тексттик жазууну тиркөөгө мүмкүндүк берет, мисалы, өзгөчө учур ташталганда жеткиликтүү эмес контексттик маалыматты кошуу.
  • Учурдагы жеке классты көрсөтүү үчүн атайын Self түрү кошулду. Self өз классынын үлгүсүн TypeVar колдонууга караганда жөнөкөй жол менен кайтарган ыкмаларды түшүндүрүү үчүн колдонулушу мүмкүн. class MyLock: def __enter__(self) -> Self: self.lock() өзүн кайтаруу
  • LiteralString түрүнө шайкеш келген сап литералдарын гана камтый турган атайын LiteralString түрү кошулду (б.а., жылаңач жана LiteralString саптары, бирок эркин же айкалышкан str саптары эмес). LiteralString түрүн саптык аргументтердин функцияларга өтүшүн чектөө үчүн, саптардын бөлүктөрүн ыктыярдуу алмаштыруу, алсыздыктарга алып келиши мүмкүн, мисалы, SQL сурамдары же кабык командалары үчүн саптарды түзүүдө. def run_query(sql: LiteralString) -> ... ... def caller(arbitrary_string:str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query("SELECT * FROM Student") # ok run_query(literal_string) # макул run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Ката run_query( # Ката f"SELECT * FROM студенттердин аты = {эрктүү_сап}" )
  • TypeVarTuple түрү кошулуп, өзгөрүлмө генериктерди колдонууга мүмкүндүк берет, TypeVarдан айырмаланып, алар бир типти эмес, типтердин ыктыярдуу санын камтыйт.
  • Стандарттык китепкана TOML форматын талдоо функциялары менен tomllib модулун камтыйт.
  • Талап кылынган жана кошумча талааларды аныктоо үчүн терилген сөздүктөрдүн (TypedDict) айрым элементтерин талап кылынган жана талап кылынбаган энбелгилер менен белгилөөгө болот (демейки боюнча, эгерде жалпы параметр False деп коюлбаса, бардык жарыяланган талаалар талап кылынат). class Movie(TypedDict): аталышы: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (жыл талаасы милдеттүү эмес) m3: Кино = {“жыл”: 2022} # Ката, керектүү аталыш талаасы толтурулган эмес)
  • TaskGroup классы тапшырмалар тобунун аяктоосун күткөн асинхрондук контекст башкаруучусун ишке ашыруу менен асинцио модулуна кошулду. Топко тапшырмаларды кошуу create_task() методу аркылуу ишке ашырылат. async def main(): asyncio.TaskGroup() менен тг катары синхрондоштуруу: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(başka_coro(...)) print("Эки тапшырма тең аткарылды .")
  • Класстар, методдор жана функциялар үчүн @dataclass_transform декоратору кошулду, көрсөтүлгөндө статикалык типти текшерүү системасы объектке @dataclass.dataclass жасалгалоочусун колдонгондой мамиле кылат. Төмөндөгү мисалда, CustomerModel классы, типтерди текшерүүдө @dataclasses.dataclass жасалгалоочусу бар класска окшош иштетилет, б.а. id жана ат өзгөрмөлөрүн кабыл алган __init__ ыкмасына ээ катары. @dataclass_transform() класс ModelBase: ... класс CustomerModel(ModelBase): id: int аты: str
  • Туруктуу сөз айкаштарында атомдук топтоо ((?>...)) жана ээлик кылуучу кванторлорду (*+, ++, ?+, {m,n}+) колдонуу мүмкүнчүлүгү кошулган.
  • "-P" буйрук сабы опциясы жана PYTHONSAFEPATH чөйрө өзгөрмөлөрү sys.path файлына кооптуу болушу мүмкүн болгон жолдордун автоматтык түрдө тиркелүүсүн өчүрүү үчүн кошулду.
  • Windows платформасы үчүн py.exe утилитасы “-V:” синтаксисин колдоону кошуп, кыйла жакшыртылды. / " кошумча "- . "
  • C APIдеги көптөгөн макростор кадимки же статикалык саптык функцияларга айландырылат.
  • uu, cgi, трубалар, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev жана sunau модулдары эскирди жана Pythonдо өчүрүлөт. 3.13 чыгаруу. PyUnicode_Encode* функциялары алынып салынды.

Source: opennet.ru

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