การเปิดตัวภาษาการเขียนโปรแกรม 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 benchmark suite) เพิ่มขึ้น 25%

    กลไกการแคชไบต์โค้ดได้รับการออกแบบใหม่ ช่วยลดเวลาในการเริ่มต้นการทำงานของอินเทอร์พรีเตอร์ลง 10-15% อ็อบเจกต์โค้ดและไบต์โค้ดจะถูกจัดสรรแบบคงที่โดยอินเทอร์พรีเตอร์ ช่วยลดขั้นตอนในการแยกไบต์โค้ดที่ดึงมาจากแคช และการแปลงอ็อบเจกต์โค้ดเป็นหน่วยความจำแบบไดนามิก

  • เมื่อแสดงการติดตามการเรียกในข้อความวินิจฉัย ข้อมูลเกี่ยวกับนิพจน์ที่ทำให้เกิดข้อผิดพลาดจะปรากฏขึ้น (ก่อนหน้านี้ ไฮไลต์เฉพาะบรรทัดโดยไม่ระบุรายละเอียดว่าส่วนใดของบรรทัดที่ทำให้เกิดข้อผิดพลาด) นอกจากนี้ ยังสามารถดึงข้อมูลการติดตามเพิ่มเติมผ่าน API และใช้เพื่อแมปคำสั่งไบต์โค้ดแต่ละคำสั่งไปยังตำแหน่งเฉพาะในซอร์สโค้ดโดยใช้เมธอด codeobject.co_positions() หรือฟังก์ชัน PyCode_Addr2Location() ของ C API การเปลี่ยนแปลงนี้ช่วยลดความยุ่งยากในการดีบักปัญหาเกี่ยวกับอ็อบเจ็กต์พจนานุกรมแบบซ้อน การเรียกใช้ฟังก์ชันหลายรายการ และนิพจน์ทางคณิตศาสตร์ที่ซับซ้อนได้อย่างมาก Traceback (การเรียกใช้ครั้งล่าสุด): ไฟล์ "calculation.py" บรรทัดที่ 54 ในผลลัพธ์ = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: การหารด้วยศูนย์
  • เพิ่มการรองรับกลุ่มข้อยกเว้น ทำให้โปรแกรมสามารถสร้างและจัดการข้อยกเว้นที่แตกต่างกันได้หลายรายการพร้อมกัน มีประเภทข้อยกเว้นใหม่ ได้แก่ ExceptionGroup และ BaseExceptionGroup สำหรับการจัดกลุ่มข้อยกเว้นหลายรายการและเรียกรวมกัน และเพิ่มนิพจน์ "except*" สำหรับการเลือกข้อยกเว้นแต่ละรายการจากกลุ่ม
  • มีการเพิ่มวิธี add_note() ลงในคลาส BaseException ซึ่งทำให้คุณสามารถแนบหมายเหตุข้อความลงในข้อยกเว้นได้ เช่น เพื่อเพิ่มข้อมูลบริบทที่ไม่มีอยู่เมื่อเกิดข้อยกเว้น
  • มีการเพิ่มประเภทพิเศษ Self ซึ่งแสดงถึงคลาสปิดปัจจุบัน Self สามารถใช้เพื่อใส่คำอธิบายประกอบเมธอดที่ส่งคืนอินสแตนซ์ของคลาสได้ง่ายกว่าการใช้ TypeVar class MyLock: def __enter__(self) -> Self: self.lock() return self
  • มีการเพิ่มประเภท 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 students") # ok run_query(literal_string) # ok run_query("SELECT * FROM " + literal_string) # ok run_query(arbitrary_string) # ข้อผิดพลาด run_query( # ข้อผิดพลาด f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • เพิ่มประเภท TypeVarTuple ซึ่งช่วยให้สามารถใช้ generics variadic ได้ ซึ่งต่างจาก TypeVar ตรงที่ครอบคลุมไม่ใช่หนึ่งประเภท แต่จำนวนประเภทตามต้องการ
  • ไลบรารีมาตรฐานประกอบด้วยโมดูล tomllib พร้อมฟังก์ชันสำหรับการแยกวิเคราะห์รูปแบบ TOML
  • ความสามารถในการทำเครื่องหมายองค์ประกอบแต่ละส่วนของพจนานุกรมแบบพิมพ์ (TypedDict) ด้วยป้ายกำกับ Required และ NotRequired พร้อมใช้งานแล้วเพื่อกำหนดว่าฟิลด์จำเป็นหรือไม่ (โดยค่าเริ่มต้น ฟิลด์ที่ประกาศไว้ทั้งหมดจำเป็น เว้นแต่พารามิเตอร์รวมจะถูกตั้งค่าเป็น False) class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars"} # OK (ฟิลด์ปีเป็นทางเลือก) m3: Movie = {"year": 2022} # ข้อผิดพลาด: ฟิลด์ชื่อเรื่องที่จำเป็นไม่ได้รับการกรอก)
  • ขณะนี้โมดูล asyncio มีคลาส TaskGroup คลาสนี้ใช้ตัวจัดการบริบทแบบอะซิงโครนัสที่รอให้กลุ่มงานเสร็จสมบูรณ์ งานจะถูกเพิ่มเข้าไปในกลุ่มโดยใช้เมธอด create_task() async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(…)) task2 = tg.create_task(another_coro(…)) print("Both task have done now.")
  • มีการเพิ่มตัวตกแต่ง @dataclass_transform สำหรับคลาส เมธอด และฟังก์ชัน เมื่อระบุแล้ว ระบบตรวจสอบชนิดข้อมูลแบบคงที่จะดำเนินการกับอ็อบเจ็กต์เสมือนว่ากำลังใช้ตัวตกแต่ง @dataclasses.dataclass ในตัวอย่างด้านล่าง คลาส CustomerModel จะถูกดำเนินการระหว่างการตรวจสอบชนิดข้อมูลในลักษณะเดียวกับคลาสที่มีตัวตกแต่ง @dataclasses.dataclass กล่าวคือ มีเมธอด __init__ ที่รับตัวแปร id และ name @dataclass_transform() class ModelBase: … class CustomerModel(ModelBase): id: int name: str
  • ปัจจุบันนิพจน์ทั่วไปรองรับการจัดกลุ่มอะตอม ((?>…)) และตัวระบุความเป็นเจ้าของ (*+, ++, ?+, {m,n}+)
  • เพิ่มตัวเลือกบรรทัดคำสั่ง "-P" และตัวแปรสภาพแวดล้อม PYTHONSAFEPATH เพื่อปิดใช้งานการแนบไฟล์เส้นทางที่อาจไม่ปลอดภัยไปยัง sys.path โดยอัตโนมัติ
  • ยูทิลิตี้ py.exe สำหรับแพลตฟอร์มได้รับการปรับปรุงอย่างมาก Windowsซึ่งเป็นการนำไวยากรณ์ "-V:" มาใช้ / "นอกจากนี้"- . ".
  • แมโครจำนวนมากใน C API ได้รับการแปลงให้เป็นฟังก์ชันอินไลน์ปกติหรือแบบคงที่
  • โมดูลต่อไปนี้ไม่รองรับอีกต่อไปและจะถูกลบออกใน Python 3.13: uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev และ sunau ฟังก์ชัน PyUnicode_Encode* ได้ถูกลบออกแล้ว

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster