Python 3.6

Python 3.6 beta 1 được phát hành vào ngày 12 tháng 9 năm 2016, và tóm tắt các tính năng mới có thể xem tại đây:

Tính năng cú pháp mới

Trạng thái

PEP 498

Định dạng chuỗi ký tự

Hoàn thành

PEP 515

Dấu gạch dưới trong hằng số số

Hoàn thành

PEP 525

Trình tạo bất đồng bộ

PEP 526

Cú pháp cho chú thích biến (tạm thời)

Hoàn thành

PEP 530

Comprehension bất đồng bộ

Tính năng tích hợp mới

PEP 468

Bảo toàn thứ tự của kwargs trong hàm

PEP 487

Tùy chỉnh đơn giản hơn khi tạo lớp

Một phần [1]

PEP 520

Bảo toàn thứ tự định nghĩa thuộc tính của lớp

Thay đổi thư viện chuẩn

PEP 495

Phân biệt giờ địa phương

PEP 506

Thêm module Secrets vào thư viện chuẩn

PEP 519

Thêm giao thức đường dẫn hệ thống tệp

Nội tại CPython

PEP 509

Thêm phiên bản riêng vào dict

Sẽ không thực hiện

PEP 523

Thêm API đánh giá frame vào CPython

Thay đổi trên Linux/Windows

PEP 524

Làm cho os.urandom() chặn trên Linux (trong khi khởi động hệ thống)

PEP 528

Thay đổi mã hóa console Windows thành UTF-8

PEP 529

Thay đổi mã hóa hệ thống tệp Windows thành UTF-8

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

Câu lệnh global hoặc nonlocal bây giờ phải xuất hiện về mặt văn bản trước lần sử dụng đầu tiên của tên bị ảnh hưởng trong cùng phạm vi. Trước đây, điều này chỉ là SyntaxWarning.

Hiện có thể đặt một phương thức đặc biệt thành None để chỉ ra rằng hoạt động tương ứng không khả dụng. Ví dụ, nếu một lớp đặt __iter__() thành None, lớp đó không thể lặp.

Các chuỗi dài gồm các dòng traceback lặp lại bây giờ được viết tắt là [Previous line repeated {count} more times]

Import bây giờ sẽ raise exception mới ModuleNotFoundError khi không thể tìm thấy module. Mã hiện tại kiểm tra ImportError (trong try-except) vẫn sẽ hoạt động.

Các phương thức của lớp dựa vào super() không có đối số bây giờ sẽ hoạt động đúng khi được gọi từ các phương thức metaclass trong quá trình tạo lớp.

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

array

Các iterator đã cạn kiệt của array.array bây giờ sẽ vẫn cạn kiệt ngay cả khi mảng được lặp qua bị mở rộng.

binascii

Hàm b2a_base64() bây giờ chấp nhận đối số từ khóa tùy chọn newline để kiểm soát xem ký tự xuống dòng có được thêm vào giá trị trả về hay không

Hoàn thành

cmath

Hằng số mới cmath.tau (τ) đã được thêm vào

Các hằng số mới: cmath.infcmath.nan để khớp với math.infmath.nan, cũng như cmath.infjcmath.nanj để khớp với định dạng được sử dụng bởi complex repr

collections

Lớp cơ sở trừu tượng Collection mới đã được thêm vào để đại diện cho các lớp container có thể lặp có kích thước

Lớp cơ sở trừu tượng Reversible mới đại diện cho các lớp có thể lặp cũng cung cấp phương thức __reversed__().

Lớp cơ sở trừu tượng AsyncGenerator mới đại diện cho các trình tạo bất đồng bộ.

Hàm namedtuple() bây giờ chấp nhận đối số từ khóa tùy chọn module, khi được chỉ định sẽ được sử dụng cho thuộc tính __module__ của lớp named tuple được trả về.

Các đối số verbose và rename cho namedtuple() bây giờ chỉ là keyword-only.

Các instance collections.deque đệ quy bây giờ có thể được pickle.

hashlib

Các hàm băm BLAKE2 đã được thêm vào module. blake2b()blake2s() luôn khả dụng và hỗ trợ đầy đủ tính năng của BLAKE2.

Các hàm băm SHA-3 sha3_224(), sha3_256(), sha3_384(), sha3_512(), và các hàm băm SHAKE shake_128()shake_256() đã được thêm vào.

Hàm dẫn xuất khóa dựa trên mật khẩu scrypt() hiện khả dụng với OpenSSL 1.1.0 và mới hơn.

json

json.load()json.loads() bây giờ hỗ trợ đầu vào nhị phân. JSON được mã hóa nên được biểu diễn bằng UTF-8, UTF-16, hoặc UTF-32.

math

Hằng số mới math.tau (τ) đã được thêm vào

Hoàn thành

os

Phương thức close() mới cho phép đóng rõ ràng một iterator scandir(). Iterator scandir() bây giờ hỗ trợ giao thức context manager.

Trên Linux, os.urandom() bây giờ chặn cho đến khi nhóm entropy urandom của hệ thống được khởi tạo để tăng tính bảo mật.

Lệnh gọi hệ thống getrandom() của Linux (lấy các byte ngẫu nhiên) hiện được cung cấp như hàm os.getrandom() mới.

re

Đã thêm hỗ trợ cho các modifier span trong biểu thức chính quy. Ví dụ: '(?i:p)ython' khớp với 'python' và 'Python', nhưng không khớp với 'PYTHON'; '(?i)g(?-i:v)r' khớp với 'GvR''gvr', nhưng không khớp với 'GVR'.

Các nhóm đối tượng Match có thể được truy cập bằng __getitem__, tương đương với group(). Vì vậy mo['name'] bây giờ tương đương với mo.group('name').

Các đối tượng Match bây giờ hỗ trợ các đối tượng dạng chỉ số làm chỉ số nhóm.

socket

Hàm ioctl() bây giờ hỗ trợ mã điều khiển SIO_LOOPBACK_FAST_PATH.

Các hằng số getsockopt() SO_DOMAIN, SO_PROTOCOL, SO_PEERSEC, và SO_PASSSEC bây giờ được hỗ trợ.

Hàm setsockopt() bây giờ hỗ trợ dạng setsockopt(level, optname, None, optlen: int).

Module socket bây giờ hỗ trợ họ địa chỉ AF_ALG để giao tiếp với Linux Kernel crypto API. ALG_, SOL_ALGsendmsg_afalg() đã được thêm vào.

Các hằng số Linux mới TCP_USER_TIMEOUTTCP_CONGESTION đã được thêm vào.

ssl

ssl hỗ trợ OpenSSL 1.1.0. Phiên bản tối thiểu được khuyến nghị là 1.0.2.

3DES đã bị loại bỏ khỏi bộ mã hóa mặc định và bộ mã hóa ChaCha20 Poly1305 đã được thêm vào.

SSLContext có cấu hình mặc định tốt hơn cho các tùy chọn và mã hóa.

Phiên SSL có thể được sao chép từ kết nối phía client này sang kết nối khác với lớp SSLSession mới. Tiếp tục phiên TLS có thể tăng tốc quá trình bắt tay ban đầu, giảm độ trễ và cải thiện hiệu suất.

Phương thức get_ciphers() mới có thể được sử dụng để lấy danh sách các mã hóa được bật theo thứ tự ưu tiên mã hóa.

Tất cả các hằng số và cờ đã được chuyển đổi sang IntEnumIntFlags.

Các giao thức TLS dành riêng cho phía server và client đối với SSLContext đã được thêm vào.

Đã thêm SSLContext.post_handshake_auth để bật và ssl.SSLSocket.verify_client_post_handshake() để khởi tạo xác thực sau bắt tay TLS 1.3.

struct

bây giờ hỗ trợ số thực nửa độ chính xác IEEE 754 thông qua ký hiệu định dạng 'e'.

sys

Hàm getfilesystemencodeerrors() mới trả về tên của chế độ lỗi được sử dụng để chuyển đổi giữa tên tệp Unicode và tên tệp dạng bytes.

zlib

Các hàm compress()decompress() bây giờ chấp nhận đối số từ khóa

Ghi chú