Python 3.9¶
Python 3.9.0 (final) ได้เปิดตัวเมื่อวันที่ 5 ตุลาคม 2020 ฟีเจอร์สำหรับ 3.9 ถูกกำหนดไว้ใน PEP 596 และคำอธิบายโดยละเอียดของการเปลี่ยนแปลงสามารถดูได้ใน What's New in Python 3.9
ฟีเจอร์ |
สถานะ |
|
การเข้าถึงสถานะโมดูลอย่างรวดเร็วจากเมธอดของประเภท C extension |
ไม่เกี่ยวข้อง |
|
เพิ่ม union operators ให้กับ dict |
สมบูรณ์ [1] |
|
Type hinting generics ใน standard collections |
||
คำอธิบาย annotation ของฟังก์ชันและตัวแปรแบบยืดหยุ่น |
||
CPython ใช้รอบการเปิดตัวประจำปี แทนที่จะเป็นประจำปี มุ่งหมายให้มีรอบการเปิดตัวสองเดือน |
ไม่เกี่ยวข้อง |
|
ผ่อนคลายข้อจำกัดไวยากรณ์สำหรับ decorator |
||
ฐานข้อมูล IANA Time Zone ขณะนี้อยู่ใน standard library ในโมดูล zoneinfo |
||
เมธอด String สำหรับลบ prefix และ suffix |
||
CPython ขณะนี้ใช้ parser ใหม่ที่อิงกับ PEG |
ไม่เกี่ยวข้อง |
การเปลี่ยนแปลงภาษาอื่นๆ:
__import__() ขณะนี้แสดง ImportError แทน ValueError |
สมบูรณ์ |
Python ขณะนี้รับเส้นทางสัมบูรณ์ของชื่อไฟล์สคริปต์ที่ระบุในบรรทัดคำสั่ง (เช่น: python3 script.py): attribute __file__ ของโมดูล __main__ กลายเป็นเส้นทางสัมบูรณ์แทนที่จะเป็นเส้นทางสัมพัทธ์ |
|
ตามค่าเริ่มต้นเพื่อประสิทธิภาพสูงสุด อาร์กิวเมนต์ errors จะถูกตรวจสอบเฉพาะในข้อผิดพลาดการเข้ารหัส/ถอดรหัสครั้งแรก และอาร์กิวเมนต์ encoding บางครั้งจะถูกละเว้นสำหรับสตริงว่าง |
|
"".replace("", s, n) ขณะนี้ส่งคืน s แทนสตริงว่างสำหรับ n ที่ไม่ใช่ศูนย์ทั้งหมด ซึ่งขณะนี้สอดคล้องกับ "".replace("", s) |
|
ขณะนี้นิพจน์ที่ถูกต้องใดๆ สามารถใช้เป็น decorator ได้ ก่อนหน้านี้ไวยากรณ์มีข้อจำกัดมากกว่า |
|
การรัน aclose() / asend() / athrow() แบบขนานกันขณะนี้ถูกห้าม และ ag_running ขณะนี้สะท้อนสถานะการรันจริงของ async generator |
|
ข้อผิดพลาดที่ไม่คาดคิดในการเรียกเมธอด __iter__ ไม่ถูกปิดบังด้วย TypeError ในตัวดำเนินการ in และฟังก์ชัน contains(), indexOf() และ countOf() ของโมดูล operator อีกต่อไป |
|
นิพจน์ lambda ที่ไม่มีวงเล็บไม่สามารถเป็นส่วนนิพจน์ใน clause if ใน comprehensions และ generator expressions อีกต่อไป |
การเปลี่ยนแปลงในโมดูลบิวต์อิน:
เนื่องจากข้อกังวลด้านความปลอดภัยที่สำคัญ พารามิเตอร์ reuse_address ของ asyncio.loop.create_datagram_endpoint() ไม่ได้รับการรองรับอีกต่อไป |
|
เพิ่ม coroutine ใหม่ shutdown_default_executor() ที่กำหนดการ shutdown สำหรับ default executor ที่รอให้ ThreadPoolExecutor ปิดการทำงาน นอกจากนี้ asyncio.run() ได้รับการอัปเดตให้ใช้ coroutine ใหม่นี้ |
|
เพิ่ม asyncio.PidfdChildWatcher ซึ่งเป็นการนำ child watcher เฉพาะ Linux ไปใช้งานที่ poll file descriptors ของกระบวนการ |
|
เพิ่ม coroutine ใหม่ asyncio.to_thread() |
|
เมื่อยกเลิกงานเนื่องจาก timeout asyncio.wait_for() จะรอจนกว่าการยกเลิกจะเสร็จสมบูรณ์ในกรณีที่ timeout <= 0 ด้วย เช่นเดียวกับที่ทำกับ timeout ที่เป็นบวก |
|
asyncio ขณะนี้แสดง TyperError เมื่อเรียกเมธอดที่ไม่เข้ากันกับ socket ssl.SSLSocket |
|
Garbage collection ไม่บล็อกบนอ็อบเจ็กต์ที่ฟื้นคืนชีพ |
|
เพิ่มฟังก์ชันใหม่ gc.is_finalized() เพื่อตรวจสอบว่าอ็อบเจ็กต์ได้รับการ finalized โดย garbage collector แล้วหรือไม่ |
|
ขยายฟังก์ชัน math.gcd() ให้รองรับหลายอาร์กิวเมนต์ ก่อนหน้านี้รองรับเพียงสองอาร์กิวเมนต์ |
|
เพิ่ม math.lcm(): ส่งคืนตัวคูณร่วมน้อยของอาร์กิวเมนต์ที่ระบุ |
|
เพิ่ม math.nextafter(): ส่งคืนค่า floating-point ถัดไปหลังจาก x ในทิศทางของ y |
|
เพิ่ม math.ulp(): ส่งคืนค่าของบิตที่มีนัยสำคัญน้อยที่สุดของ float |
|
เปิดเผย os.pidfd_open() และ os.P_PIDFD เฉพาะ Linux |
|
ฟังก์ชัน os.unsetenv() ขณะนี้พร้อมใช้งานบน Windows ด้วย |
สมบูรณ์ |
ฟังก์ชัน os.putenv() และ os.unsetenv() ขณะนี้พร้อมใช้งานเสมอ |
สมบูรณ์ |
เพิ่มฟังก์ชัน os.waitstatus_to_exitcode(): แปลง wait status เป็น exit code |
|
เพิ่มเมธอด random.Random.randbytes ใหม่: สร้างไบต์แบบสุ่ม |
|
เพิ่ม attribute ใหม่ sys.platlibdir: ชื่อของไดเรกทอรี library เฉพาะแพลตฟอร์ม |
|
ก่อนหน้านี้ sys.stderr เป็นแบบ block-buffered เมื่อไม่ใช่ interactive ขณะนี้ stderr ค่าเริ่มต้นจะเป็นแบบ line-buffered เสมอ |
|
หมายเหตุ