Python 3.10 програмчлалын хэлийг гаргасан

Жилийн турш хөгжүүлсний дараа Python 3.10 програмчлалын хэлний томоохон хувилбарыг танилцуулж байна. Шинэ салбарыг нэг жил хагасын хугацаанд дэмжих бөгөөд дараа нь гурван жил хагасын хугацаанд сул талыг арилгах засваруудыг хийх болно.

Үүний зэрэгцээ Python 3.11 салбарын альфа туршилт эхэлсэн (шинэ хөгжүүлэлтийн хуваарийн дагуу шинэ салбар дээр ажиллах ажил өмнөх салбар гарахаас таван сарын өмнө эхэлж, дараагийн хувилбар гарах үед альфа туршилтын шатанд хүрдэг. ). Python 3.11 салбар нь долоон сарын турш альфа хувилбарт байх бөгөөд энэ хугацаанд шинэ боломжуудыг нэмж, алдаануудыг засна. Үүний дараа бета хувилбаруудыг гурван сарын турш турших бөгөөд энэ хугацаанд шинэ функц нэмэхийг хориглож, алдаа засахад бүх анхаарлаа хандуулах болно. Суллахаас өмнөх сүүлийн хоёр сарын хугацаанд салбар нь эцсийн тогтворжуулалтыг хийх нэр дэвшигчийн шатанд байх болно.

Python 3.10-ийн шинэ нэмэлтүүд нь:

  • Загвар тааруулах "тохиолдол" ба "хэрэгс" операторуудыг хэрэгжүүлсэн бөгөөд энэ нь код унших чадварыг сайжруулж, дурын Python объектуудын тааруулах ажлыг хялбарчилж, статик төрлийн дэвшилтэт шалгалтаар кодын найдвартай байдлыг нэмэгдүүлдэг. Хэрэгжилт нь Scala, Rust, F# дээр өгөгдсөн "match" оператортой маш төстэй бөгөөд заасан илэрхийллийн үр дүнг "case" оператор дээр үндэслэн блокуудад жагсаасан загваруудын жагсаалттай харьцуулдаг.

    def http_error(status): таарч байгаа байдал: тохиолдол 400: буцах "Муу хүсэлт" тохиолдол 401|403|404: буцаах "Зөвшөөрөгдөөгүй" тохиолдол 418: "Би цайны хүн" буцах тохиолдол _: "Өөр зүйл" буцаах

    Одоо байгаа утгууд дээр тулгуурлан хувьсагчдыг холбохын тулд объект, залгуур, жагсаалт, дурын дарааллыг задлах боломжтой. Оруулсан загваруудыг тодорхойлох, загварт нэмэлт "хэрэв" нөхцөлийг ашиглах, маск ("[x, y, *rest]"), түлхүүр/утгын зураглал (жишээ нь, {"зурвасын өргөн": b, "хоцролт" зэргийг ашиглахыг зөвшөөрнө. ”: l} толь бичгээс "зурвасын өргөн" болон "хоцролт" утгыг задлах, дэд загваруудыг задлах (":=" оператор), загварт нэрлэгдсэн тогтмолуудыг ашиглах. Хичээл дээр "__match__()" аргыг ашиглан тохирох зан төлөвийг өөрчлөх боломжтой.

    өгөгдлийн ангиас импортлох dataclass @dataclass class Цэг: x: int y: int def whereis(point): тохирох цэг: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Өөр хаа нэгтээ") case _: print("Цэг биш") таарах цэг: case Point(x, y) бол x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Диагональ дээр биш") УЛААН, НОГООН, ЦЭНХЭР = 0, 1, 2 таарч байгаа өнгө: хайрцаг УЛААН: хэвлэх(“Би улаан харагдаж байна!”) хайрцаг НОГООН: хэвлэх(“Өвс ногоон”) хайрцаг ЦЭНХЭР: хэвлэх(“Би блюзийг мэдэрч байна :(“)

  • Одоо контекст менежерүүдийн цуглуулгын тодорхойлолтыг олон мөрөнд хуваахын тулд with мэдэгдэлд хаалт ашиглах боломжтой болсон. Бүлэг дэх эцсийн контекст менежерийн ард таслал үлдээхийг зөвшөөрнө: жишээгээр ( CtxManager1() жишээ1, CtxManager2() жишээ2, CtxManager3() жишээ3, ): ...
  • Мөрийн литерал дахь хаалтгүй хаалт болон ишлэлүүдтэй холбоотой алдааны кодын байршлын тайланг сайжруулсан. Жишээлбэл, хаалтгүй хаалт байгаа үед дараах бүтэц дэх синтаксийн алдааг мэдээлэхийн оронд заагч нь нээх хаалтыг онцолж, хаалтын блок байхгүй гэдгийг харуулж байна. "example.py" файл, хүлээгдэж буй мөр 1 = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' хэзээ ч хаагдаагүй

    Нэмэлт мэргэшсэн синтаксийн алдааны мэдэгдлүүд нэмэгдсэн: блокийн өмнө болон толь бичигт ":" тэмдэг дутсан, товхимолыг хаалтаар тусгаарлаагүй, жагсаалтад таслал дутсан, "оролдох" блокийг "бусад" болон "эцэст нь"-гүйгээр зааж өгсөн, "=" ашиглана. Харьцуулахдаа "= =" оронд " f-мөрт дэх *-илэрхийлэлийг зааж өгсөн. Нэмж дурдахад, энэ нь зөвхөн эхлэлийг бус асуудалтай илэрхийлэлийг бүхэлд нь тодруулж, буруу доголтой холбоотой алдааны нөхцөл байдлын талаар илүү тодорхой мэдээллийг баталгаажуулдаг. >>> def foo(): ... хэрэв lel: ... x = 2 Файл " ", 3-р мөр x = 2 ^ IndentationError: 2-р мөрөнд 'if' хэллэгийн дараа доголтой блок гарч ирнэ.

    Функцийн шинж чанар, хувьсагчийн нэрийн үсгийн алдаанаас үүссэн алдаа гарсан тохиолдолд зөв нэртэй зөвлөмж гарна. >>>collections.namedtoplo Traceback (хамгийн сүүлийн дуудлага): Файл « ", мөр 1, in AttributeError: "цуглуулга" модульд "namedtoplo" шинж чанар байхгүй. Та нэрлэсэн tuple гэсэн үг үү?

  • Дибаг хийх хэрэгсэл болон профайлын хувьд мөрийн үйл явдлуудыг гүйцэтгэсэн кодын яг мөрийн дугаараар хангадаг.
  • TextIOWrapper болон open()-д UTF-8 кодлогдсон файлуудыг 'encoding=»utf-8″' сонголтыг тодорхой заагаагүй (ASCII кодчилолыг анхдагчаар ашигладаг) боловсруулахтай холбоотой болзошгүй алдааны талаар анхааруулга харуулахын тулд sys.flags.warn_default_encoding тохиргоог нэмсэн. . Шинэ хувилбар нь одоогийн локал тохиргоонд тулгуурлан кодчиллыг тохируулах 'encoding="locale"' утгыг зааж өгөх боломжийг олгодог.
  • Бичих модульд шинэ оператор нэмэгдсэн бөгөөд энэ нь төрлийн тэмдэглэгээг зааж өгөх хэрэгслүүдээр хангагдсан бөгөөд "X | Y" гэсэн төрлүүдийн аль нэгийг (X төрөл эсвэл Y төрөл) сонгоно уу. def квадрат(тоо: int | float) -> int | float: буцах дугаар ** 2 нь өмнө нь дэмжигдсэн бүтэцтэй тэнцүү байна: def square(тоо: Union[int, float]) -> Union[int, float]: буцах дугаар ** 2
  • Concatenate оператор болон ParamSpec хувьсагчийг бичих модульд нэмсэн бөгөөд энэ нь Callable-г ашиглах үед статик төрлийг шалгах нэмэлт мэдээллийг дамжуулах боломжийг танд олгоно. Бичих модуль нь мөн төрлийн хамгаалалтын функцийг тэмдэглэхийн тулд TypeGuard тусгай утгуудыг нэмдэг ба төрлийн бусад нэрийг тодорхой тодорхойлохын тулд TypeAlias-ыг нэмдэг. StrCache: TypeAlias ​​= 'Cache[str]' # төрлийн бусад нэр
  • zip() функц нь нэмэлт "хатуу" тугийг хэрэгжүүлдэг бөгөөд заасан үед давтагдаж буй аргументууд ижил урттай эсэхийг шалгадаг. >>> жагсаалт(zip(('a', 'b', 'c'), (1, 2, 3), хатуу=Үнэн)) [('a', 1), ('b', 2) , ('c', 3)] >>> жагсаалт(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (хамгийн сүүлийн дуудлага ): … ValueError: zip() аргумент 2 нь аргумент 1-ээс урт байна
  • iter() ба next() функцүүдийн асинхрон аналогийг хэрэгжүүлснээр aiter() болон anext() шинэ суулгасан функцуудыг санал болгож байна.
  • Жижиг объекттой ажиллах үед str(), bytes() болон bytearray() бүтээгчдийн ажлыг 30-40%-иар хурдасгасан.
  • runpy модулийн импортын үйлдлүүдийн тоог бууруулсан. "python3 -m module_name" команд одоо импортын модулиудын тоог 1.4-өөс 69 болгон бууруулснаар дунджаар 51 дахин хурдан ажиллаж байна.
  • LOAD_ATTR заавар нь хувь хүний ​​опкодын кэшийн механизмыг ашигладаг бөгөөд энэ нь ердийн шинж чанаруудтай ажлыг 36%, слоттой 44% хүртэл хурдасгах боломжтой болгосон.
  • Python-г "--enable-optimizations" сонголтоор бүтээх үед "-fno-semantic-interposition" горим идэвхжсэн бөгөөд энэ нь "-enable-shared"-тэй харьцуулахад орчуулагчийг 30% хүртэл хурдасгах боломжийг олгодог. ” сонголт.
  • Hashlib болон ssl модулиуд нь OpenSSL 3.0.0-ийн дэмжлэгийг нэмсэн бөгөөд 1.1.1-ээс өмнөх OpenSSL хувилбаруудыг дэмжихээ больсон.
  • Хуучин задлагчийг устгасан бөгөөд өмнөх салбар дахь PEG (Parsing Expression Grammar) задлан шинжлэгчээр сольсон. Форматлагч модулийг устгасан. Давталтын параметрийг asyncio API-аас хассан. Өмнө нь хуучирсан аргуудыг устгасан. Py_UNICODE* мөрийг удирдах Py_UNICODE_str* функцууд устгагдсан.
  • distutils модулийг хуучирсан бөгөөд Python 3.12 дээр устгахаар төлөвлөж байна. Distutils-ийн оронд setuptools, packaging, platform, shutil, subprocess болон sysconfig модулиудыг ашиглахыг зөвлөж байна. PyUnicodeObject дахь wstr бүтцийг хуучирсан бөгөөд устгахаар төлөвлөсөн.

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

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