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

PEP 570

Đối số chỉ vị trí

PEP 572

Biểu thức gán

Hoàn thành

PEP 574

Giao thức Pickle 5 với dữ liệu ngoài băng

PEP 578

Hook kiểm toán thời gian chạy

PEP 587

Cấu hình khởi tạo Python

PEP 590

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, intfractions.Fraction bây giờ có phương thức as_integer_ratio() giống như trong floatdecimal.Decimal

Các constructor của int, floatcomplex 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

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.

gc

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)

math

Đã 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()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

sys

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"