Python 3.8¶
Python 3.8.0 (final) được phát hành vào ngày 14 tháng 10 năm 2019. Các tính năng cho 3.8 được định nghĩa trong PEP 569 và mô tả chi tiết về các thay đổi có thể tìm thấy trong What's New in Python 3.8.
Tính năng |
Trạng thái |
|
Đối số chỉ vị trí |
||
Biểu thức gán |
Hoàn thành |
|
Giao thức Pickle 5 với dữ liệu ngoài băng |
||
Hook kiểm toán thời gian chạy |
||
Cấu hình khởi tạo Python |
||
Vectorcall: giao thức gọi hàm nhanh cho CPython |
||
Khác |
||
f-strings hỗ trợ = cho các biểu thức tự tài liệu và gỡ lỗi |
Hoàn thành |
|
Các thay đổi ngôn ngữ khác:
Câu lệnh continue không được phép trong mệnh đề finally do vấn đề triển khai. Trong Python 3.8 hạn chế này đã được dỡ bỏ |
Hoàn thành |
Các kiểu bool, int và fractions.Fraction bây giờ có phương thức as_integer_ratio() giống như trong float và decimal.Decimal |
|
Các constructor của int, float và complex bây giờ sẽ sử dụng phương thức đặc biệt __index__(), nếu có và phương thức tương ứng __int__(), __float__() hoặc __complex__() không khả dụng |
|
Đã thêm hỗ trợ cho các escape N{name} trong biểu thức chính quy |
|
Dict và dictviews bây giờ có thể lặp theo thứ tự chèn ngược sử dụng reversed() |
|
Cú pháp được phép cho tên từ khóa trong lời gọi hàm đã bị hạn chế thêm. Đặc biệt, f((keyword)=arg) không còn được phép |
|
Giải nén iterable tổng quát trong câu lệnh yield và return không còn yêu cầu dấu ngoặc đơn bao quanh |
|
Khi thiếu dấu phẩy trong mã như [(10, 20) (30, 40)], trình biên dịch hiển thị SyntaxWarning với gợi ý hữu ích |
|
Các phép tính số học giữa các lớp con của datetime.date hoặc datetime.datetime và các đối tượng datetime.timedelta bây giờ trả về một instance của lớp con, thay vì lớp cơ sở |
|
Khi trình thông dịch Python bị ngắt bởi Ctrl-C (SIGINT) và exception KeyboardInterrupt kết quả không được bắt, tiến trình Python bây giờ thoát qua tín hiệu SIGINT hoặc với mã thoát đúng sao cho tiến trình gọi có thể phát hiện rằng nó đã dừng do Ctrl-C |
|
Một số kiểu lập trình nâng cao yêu cầu cập nhật đối tượng types.CodeType cho một hàm hiện có |
|
Đối với số nguyên, dạng ba đối số của hàm pow() bây giờ cho phép số mũ âm trong trường hợp cơ số nguyên tố cùng nhau với số module |
|
Dict comprehension đã được đồng bộ hóa với dict literal sao cho khóa được tính trước và giá trị được tính sau |
|
Phương thức object.__reduce__() bây giờ có thể trả về một tuple từ hai đến sáu phần tử |
Thay đổi đối với các module tích hợp:
asyncio.run() đã được nâng cấp từ API tạm thời lên API ổn định |
Hoàn thành |
Chạy python -m asyncio khởi chạy một REPL bất đồng bộ thuần túy |
|
Exception asyncio.CancelledError bây giờ kế thừa từ BaseException thay vì Exception và không còn kế thừa từ concurrent.futures.CancelledError |
Hoàn thành |
Đã thêm asyncio.Task.get_coro() để lấy coroutine được bao bọc trong một asyncio.Task |
|
Các task Asyncio bây giờ có thể được đặt tên, bằng cách truyền đối số từ khóa name cho asyncio.create_task() hoặc phương thức vòng lặp sự kiện create_task(), hoặc bằng cách gọi phương thức set_name() trên đối tượng task |
|
Đã thêm hỗ trợ Happy Eyeballs cho asyncio.loop.create_connection(). Để chỉ định hành vi, hai tham số mới đã được thêm vào: happy_eyeballs_delay và interleave. |
|
get_objects() bây giờ có thể nhận một tham số generation tùy chọn chỉ định thế hệ để lấy đối tượng. (Tuy nhiên lưu ý rằng trong khi gc là tích hợp sẵn, get_objects() không được triển khai cho MicroPython) |
|
Đã thêm hàm mới math.dist() để tính khoảng cách Euclid giữa hai điểm |
|
Mở rộng hàm math.hypot() để xử lý nhiều chiều |
|
Đã thêm hàm mới math.prod(), là hàm tương tự của sum() trả về tích của giá trị "start" (mặc định: 1) nhân với một iterable các số |
|
Đã thêm hai hàm tổ hợp mới math.perm() và math.comb() |
|
Đã thêm hàm mới math.isqrt() để tính căn bậc hai nguyên chính xác mà không cần chuyển đổi sang số thực |
|
Hàm math.factorial() không còn chấp nhận các đối số không có dạng int |
Hoàn thành |
Thêm hàm sys.unraisablehook() mới có thể được ghi đè để kiểm soát cách xử lý các "exception không thể raise" |
|