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 ашиглахаас илүү хялбар аргаар ангийнхаа жишээг буцаах аргуудыг тэмдэглэж болно. анги MyLock: def __enter__(self) -> Self: self.lock() өөрийгөө буцаана
  • Зөвхөн LiteralString төрөлд тохирох мөрийн литералуудыг багтаах боломжтой тусгай LiteralString төрлийг нэмсэн (өөрөөр хэлбэл нүцгэн ба LiteralString мөрүүд, гэхдээ дурын эсвэл хосолсон str мөр биш). LiteralString төрлийг функцүүдэд мөрийн аргумент дамжуулахыг хязгаарлах, мөрийн хэсгүүдийг дур мэдэн орлуулах зэрэг нь эмзэг байдалд хүргэж болзошгүй, жишээлбэл, SQL асуулга эсвэл бүрхүүлийн командуудад мөр үүсгэх үед ашиглаж болно. def run_query(sql: LiteralString) -> ... ... def caller( дурын_мөр: str, query_string: LiteralString, хүснэгтийн_нэр: LiteralString, ) -> Байхгүй: run_query("SELECT * FROM Student") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(дурын_мөр) # Алдаа ажиллуулах_асуулга( # Алдаа f"СОНГОХ * FROM оюутнуудаас ХААНА нэр = {дурын_мөр}" )
  • TypeVarTuple төрлийг нэмсэн бөгөөд энэ нь нэг төрлийн биш, харин дурын тооны төрлийг хамардаг TypeVar-аас ялгаатай нь хувьсагчийн ерөнхий хувилбаруудыг ашиглах боломжийг олгосон.
  • Стандарт номын сан нь TOML форматыг задлан шинжлэх функц бүхий tomllib модулийг агуулдаг.
  • Бичсэн толь бичгүүдийн (TypedDict) бие даасан элементүүдийг шаардлагатай болон шаардлагагүй талбаруудыг тодорхойлохын тулд шаардлагатай болон шаардлагагүй шошготойгоор тэмдэглэх боломжтой (өгөгдмөл байдлаар, нийт параметрийг худал гэж тохируулаагүй бол бүх зарласан талбарууд шаардлагатай). анги Кино(TypedDict): гарчиг: str он: Шаардлагагүй[int] m1: Кино = {"гарчиг": "Хар ирвэс", "жил": 2018} # OK m2: Кино = {"гарчиг": "Оддын дайн" } # OK (жилийн талбар заавал биш) m3: Кино = {“жил”: 2022} # Алдаа, шаардлагатай гарчгийн талбарыг бөглөөгүй байна)
  • TaskGroup анги нь асинхрон контекст менежерийг хэрэгжүүлснээр асинцио модульд нэмэгдсэн бөгөөд энэ нь бүлэг ажлыг дуусгахыг хүлээж байна. Бүлэгт даалгавар нэмэх нь create_task() аргыг ашиглан хийгддэг. async def main(): asyncio.TaskGroup()-тай tg байдлаар асинх: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task( other_coro(...)) print("Хоёр ажил одоо дууслаа. .")
  • Ангиуд, арга, функцэд зориулсан @dataclass_transform чимэглэгчийг нэмсэн. Тодорхойлсон үед статик төрлийг шалгах систем нь тухайн объектыг @dataclass.dataclass чимэглэгчийг ашиглаж байгаа мэт харуулдаг. Доорх жишээнд, CustomerModel анги төрлийг шалгахдаа @dataclasses.dataclass чимэглэгчтэй ангитай адил боловсруулагдах болно, өөрөөр хэлбэл. id болон name хувьсагчдыг хүлээн зөвшөөрдөг __init__ аргатай. @dataclass_transform() анги ModelBase: ... анги CustomerModel(ModelBase): id: int нэр: str
  • Тогтмол хэллэгт атомын бүлэглэл ((?>...)) болон эзэмшлийн хэмжигдэхүүн (*+, ++, ?+, {m,n}+) ашиглах чадварыг нэмсэн.
  • "-P" командын мөрийн сонголт болон PYTHONSAFEPATH орчны хувьсагчийг нэмсэн бөгөөд sys.path руу аюултай байж болзошгүй файлын замыг автоматаар хавсаргахыг идэвхгүй болгосон.
  • Windows платформд зориулсан py.exe хэрэглүүрийг мэдэгдэхүйц сайжруулж, "-V:" синтаксыг дэмжсэн. / " гадна "- . "
  • C API дахь олон макро нь ердийн эсвэл статик шугамын функц болгон хувиргадаг.
  • uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, болон sunau модулиуд хуучирсан бөгөөд Python дээр устгагдах болно. 3.13 хувилбар. PyUnicode_Encode* функцийг устгасан.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх