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" |
|