Python 3.8¶
Python 3.8.0 (final) ได้เปิดตัวเมื่อวันที่ 14 ตุลาคม 2019 ฟีเจอร์สำหรับ 3.8 ถูกกำหนดไว้ใน PEP 569 และคำอธิบายโดยละเอียดของการเปลี่ยนแปลงสามารถดูได้ใน What's New in Python 3.8.
ฟีเจอร์ | สถานะ | |
อาร์กิวเมนต์แบบตำแหน่งเท่านั้น | ||
Assignment Expressions | สมบูรณ์ | |
Pickle protocol 5 พร้อมข้อมูล out-of-band | ||
Runtime audit hooks | ||
การกำหนดค่าการเริ่มต้น Python | ||
Vectorcall: โปรโตคอลการเรียกที่รวดเร็วสำหรับ CPython | ||
เบ็ดเตล็ด | ||
f-strings รองรับ = สำหรับ self-documenting expressions และการดีบัก | สมบูรณ์ | |
การเปลี่ยนแปลงภาษาอื่นๆ:
คำสั่ง continue ไม่ได้รับอนุญาตใน clause finally เนื่องจากปัญหาในการนำไปใช้งาน ข้อจำกัดนี้ถูกยกเลิกใน Python 3.8 | สมบูรณ์ |
ประเภท bool, int และ fractions.Fraction ขณะนี้มีเมธอด as_integer_ratio() เช่นเดียวกับที่พบใน float และ decimal.Decimal | |
Constructor ของ int, float และ complex ขณะนี้จะใช้เมธอดพิเศษ __index__() หากมีให้ใช้งาน และเมธอดที่เกี่ยวข้อง __int__(), __float__() หรือ __complex__() ไม่พร้อมใช้งาน | |
เพิ่มการรองรับ N{name} escapes ในนิพจน์ปกติ | |
Dict และ dictviews ขณะนี้สามารถวนซ้ำในลำดับการแทรกแบบย้อนกลับโดยใช้ reversed() | |
ไวยากรณ์ที่อนุญาตสำหรับชื่อ keyword ในการเรียกฟังก์ชันถูกจำกัดเพิ่มเติม โดยเฉพาะอย่างยิ่ง f((keyword)=arg) ไม่ได้รับอนุญาตอีกต่อไป | |
การแกะ iterable ทั่วไปใน yield และ return statements ไม่จำเป็นต้องมีวงเล็บล้อมรอบอีกต่อไป | |
เมื่อขาด comma ในโค้ดเช่น [(10, 20) (30, 40)] คอมไพเลอร์จะแสดง SyntaxWarning พร้อมคำแนะนำที่เป็นประโยชน์ | |
การดำเนินการทางคณิตศาสตร์ระหว่าง subclasses ของ datetime.date หรือ datetime.datetime กับอ็อบเจ็กต์ datetime.timedelta ขณะนี้ส่งคืนอินสแตนซ์ของ subclass แทนที่จะเป็นคลาสฐาน | |
เมื่อ Python interpreter ถูกขัดจังหวะด้วย Ctrl-C (SIGINT) และข้อยกเว้น KeyboardInterrupt ที่เกิดขึ้นไม่ถูก catch กระบวนการ Python จะออกผ่านสัญญาณ SIGINT หรือด้วย exit code ที่ถูกต้องเพื่อให้กระบวนการที่เรียกสามารถตรวจจับได้ว่ามันสิ้นสุดลงเนื่องจาก Ctrl-C | |
รูปแบบการเขียนโปรแกรมขั้นสูงบางอย่างต้องการการอัปเดตอ็อบเจ็กต์ types.CodeType สำหรับฟังก์ชันที่มีอยู่ | |
สำหรับจำนวนเต็ม รูปแบบสามอาร์กิวเมนต์ของฟังก์ชัน pow() ขณะนี้อนุญาตให้ exponent เป็นลบในกรณีที่ base เป็น relatively prime กับ modulus | |
Dict comprehensions ถูกซิงค์กับ dict literals เพื่อให้ key ถูกคำนวณก่อนและ value ที่สอง | |
เมธอด object.__reduce__() ขณะนี้สามารถส่งคืน tuple ที่มีสองถึงหกองค์ประกอบ |
การเปลี่ยนแปลงในโมดูลบิวต์อิน:
asyncio.run() ได้เลื่อนจาก API เบื้องต้นไปเป็น API ที่เสถียร | สมบูรณ์ |
การรัน python -m asyncio จะเปิด REPL แบบอะซิงโครนัสโดยกำเนิด | |
ข้อยกเว้น asyncio.CancelledError ขณะนี้สืบทอดจาก BaseException แทน Exception และไม่สืบทอดจาก concurrent.futures.CancelledError อีกต่อไป | สมบูรณ์ |
เพิ่ม asyncio.Task.get_coro() สำหรับรับ coroutine ที่ถูกล้อมรับภายใน asyncio.Task | |
ขณะนี้งาน Asyncio สามารถตั้งชื่อได้ ไม่ว่าจะผ่านการส่ง keyword argument name ไปยัง asyncio.create_task() หรือเมธอด event loop create_task() หรือโดยการเรียกเมธอด set_name() บนอ็อบเจ็กต์งาน | |
เพิ่มการรองรับ Happy Eyeballs ให้กับ asyncio.loop.create_connection() เพื่อระบุพฤติกรรม ได้เพิ่มพารามิเตอร์ใหม่สองตัว: happy_eyeballs_delay และ interleave | |
get_objects() ขณะนี้สามารถรับพารามิเตอร์ generation ที่เป็นตัวเลือกเพื่อระบุ generation ที่จะรับอ็อบเจ็กต์ (แต่โปรดทราบว่าแม้ว่า gc เป็นบิวต์อิน get_objects() ไม่ได้ถูกนำไปใช้งานสำหรับ MicroPython) | |
เพิ่มฟังก์ชันใหม่ math.dist() สำหรับคำนวณระยะทาง Euclidean ระหว่างจุดสองจุด | |
ขยายฟังก์ชัน math.hypot() ให้รองรับหลายมิติ | |
เพิ่มฟังก์ชันใหม่ math.prod() เป็นฟังก์ชันที่คล้ายกับ sum() ที่ส่งคืนผลคูณของค่า "start" (ค่าเริ่มต้น: 1) คูณกับ iterable ของตัวเลข | |
เพิ่มฟังก์ชัน combinatoric ใหม่สองตัว math.perm() และ math.comb() | |
เพิ่มฟังก์ชันใหม่ math.isqrt() สำหรับคำนวณรากที่สองของจำนวนเต็มที่แม่นยำโดยไม่ต้องแปลงเป็น floating point | |
ฟังก์ชัน math.factorial() ไม่รับอาร์กิวเมนต์ที่ไม่ใช่ int-like อีกต่อไป | สมบูรณ์ |
เพิ่มฟังก์ชัน sys.unraisablehook() ใหม่ที่สามารถ override ได้เพื่อควบคุมวิธีจัดการกับ "unraisable exceptions" | |