Python 3.9

Python 3.9.0 (final) được phát hành vào ngày 5 tháng 10 năm 2020. Các tính năng cho 3.9 được định nghĩa trong PEP 596 và mô tả chi tiết về các thay đổi có thể tìm thấy trong What's New in Python 3.9

Tính năng

Trạng thái

PEP 573

Truy cập nhanh vào trạng thái module từ các phương thức của kiểu mở rộng C

Không liên quan

PEP 584

Toán tử hợp nhất được thêm vào dict

Hoàn thành [1]

PEP 585

Gợi ý kiểu generic trong các collection chuẩn

PEP 593

Chú thích hàm và biến linh hoạt

PEP 602

CPython áp dụng chu kỳ phát hành hàng năm. Thay vì hàng năm, nhắm tới chu kỳ phát hành hai tháng một lần

Không liên quan

PEP 614

Nới lỏng các hạn chế ngữ pháp về decorator

PEP 615

Cơ sở dữ liệu múi giờ IANA bây giờ có mặt trong thư viện chuẩn trong module zoneinfo

PEP 616

Các phương thức chuỗi để xóa tiền tố và hậu tố

PEP 617

CPython bây giờ sử dụng một parser mới dựa trên PEG

Không liên quan

Các thay đổi ngôn ngữ khác:

__import__() bây giờ raise ImportError thay vì ValueError

Hoàn thành

Python bây giờ lấy đường dẫn tuyệt đối của tên tệp script được chỉ định trên dòng lệnh (ví dụ: python3 script.py): thuộc tính __file__ của module __main__ đã trở thành đường dẫn tuyệt đối, thay vì đường dẫn tương đối

Theo mặc định, để đạt hiệu suất tốt nhất, đối số errors chỉ được kiểm tra tại lỗi mã hóa/giải mã đầu tiên và đối số encoding đôi khi bị bỏ qua đối với chuỗi rỗng

"".replace("", s, n) bây giờ trả về s thay vì chuỗi rỗng cho tất cả n khác không. Bây giờ nó nhất quán với "".replace("", s)

Bất kỳ biểu thức hợp lệ nào bây giờ đều có thể được sử dụng làm decorator. Trước đây, ngữ pháp bị hạn chế hơn nhiều

Chạy song song aclose() / asend() / athrow() bây giờ bị cấm, và ag_running bây giờ phản ánh trạng thái chạy thực tế của async generator

Các lỗi không mong đợi khi gọi phương thức __iter__ không còn bị che giấu bởi TypeError trong toán tử in và các hàm contains(), indexOf() và countOf() của module operator

Biểu thức lambda không có dấu ngoặc đơn không còn có thể là phần biểu thức trong mệnh đề if trong comprehension và biểu thức generator

Thay đổi đối với các module tích hợp:

asyncio

Do lo ngại bảo mật đáng kể, tham số reuse_address của asyncio.loop.create_datagram_endpoint() không còn được hỗ trợ

Đã thêm một coroutine mới shutdown_default_executor() lên lịch tắt executor mặc định chờ ThreadPoolExecutor đóng xong. Ngoài ra, asyncio.run() đã được cập nhật để sử dụng coroutine mới.

Đã thêm asyncio.PidfdChildWatcher, một triển khai child watcher dành riêng cho Linux theo dõi file descriptor của tiến trình

đã thêm một coroutine asyncio.to_thread() mới

Khi hủy task do timeout, asyncio.wait_for() bây giờ sẽ chờ cho đến khi việc hủy hoàn tất cũng trong trường hợp timeout <= 0, giống như với các timeout dương

asyncio bây giờ raise TyperError khi gọi các phương thức không tương thích với socket ssl.SSLSocket

gc

Garbage collection không chặn trên các đối tượng được hồi sinh

Đã thêm hàm mới gc.is_finalized() để kiểm tra xem một đối tượng đã được garbage collector hoàn tất chưa

math

Mở rộng hàm math.gcd() để xử lý nhiều đối số. Trước đây, nó chỉ hỗ trợ hai đối số

Đã thêm math.lcm(): trả về bội số chung nhỏ nhất của các đối số được chỉ định

Đã thêm math.nextafter(): trả về giá trị dấu phẩy động tiếp theo sau x hướng về y

Đã thêm math.ulp(): trả về giá trị của bit ít có nghĩa nhất của một số thực

os

Cung cấp os.pidfd_open()os.P_PIDFD dành riêng cho Linux

Hàm os.unsetenv() bây giờ cũng khả dụng trên Windows

Hoàn thành

Các hàm os.putenv()os.unsetenv() bây giờ luôn khả dụng

Hoàn thành

Đã thêm hàm os.waitstatus_to_exitcode(): chuyển đổi trạng thái chờ thành mã thoát

random

Đã thêm phương thức random.Random.randbytes mới: tạo các byte ngẫu nhiên

sys

Đã thêm thuộc tính sys.platlibdir mới: tên của thư mục thư viện theo nền tảng

Trước đây, sys.stderr được đệm theo block khi không tương tác. Bây giờ stderr mặc định luôn đệm theo dòng

Ghi chú