Có gì mới trong Python 3.14

biên tập viên:

Adam Turner và Hugo van Kemenade

Bài viết này giải thích các tính năng mới trong Python 3.14, so với 3.13. Python 3.14 được phát hành vào ngày 7 tháng 10 năm 2025. Để biết chi tiết đầy đủ, hãy xem changelog.

Xem thêm

PEP 745 -- Lịch phát hành Python 3.14

Tóm tắt -- Phát hành điểm nổi bật

Python 3.14 là bản phát hành ổn định mới nhất của ngôn ngữ lập trình Python, với nhiều thay đổi về ngôn ngữ, cách triển khai và thư viện chuẩn. Những thay đổi lớn nhất bao gồm template string literals, deferred evaluation of annotations và hỗ trợ subinterpreters trong thư viện chuẩn.

Những thay đổi về thư viện bao gồm các khả năng được cải thiện đáng kể cho introspection in asyncio, support for Zstandard thông qua mô-đun compression.zstd mới, làm nổi bật cú pháp trong REPL, cũng như việc ngừng sử dụng và xóa thông thường cũng như các cải tiến về tính chính xác và thân thiện với người dùng.

Bài viết này không cố gắng cung cấp thông số kỹ thuật đầy đủ của tất cả các tính năng mới mà thay vào đó cung cấp một cái nhìn tổng quan thuận tiện. Để biết chi tiết đầy đủ, hãy tham khảo tài liệu, chẳng hạn như Library ReferenceLanguage Reference. Để hiểu cơ sở lý luận về thiết kế và triển khai đầy đủ cho một thay đổi, hãy tham khảo PEP để biết một tính năng mới cụ thể; nhưng lưu ý rằng PEP thường không được cập nhật khi một tính năng đã được triển khai đầy đủ. Xem Porting to Python 3.14 để được hướng dẫn nâng cấp từ các phiên bản Python trước đó.


Cải tiến trình thông dịch:

Những cải tiến đáng kể trong thư viện tiêu chuẩn:

C API cải tiến:

Hỗ trợ nền tảng:

Phát hành thay đổi:

Tính năng mới

PEP 649 & PEP 749: Đánh giá trì hoãn các chú thích

annotations trên các hàm, lớp và mô-đun không còn được đánh giá một cách háo hức nữa. Thay vào đó, các chú thích được lưu trữ trong annotate functions có mục đích đặc biệt và chỉ được đánh giá khi cần thiết (trừ khi sử dụng from __future__ import annotations).

Thay đổi này được thiết kế để cải thiện hiệu suất và khả năng sử dụng của các chú thích trong Python trong hầu hết các trường hợp. Chi phí thời gian chạy để xác định chú thích được giảm thiểu nhưng vẫn có thể xem xét nội bộ các chú thích trong thời gian chạy. Không còn cần thiết phải kèm theo các chú thích trong chuỗi nếu chúng chứa các tham chiếu chuyển tiếp.

Mô-đun annotationlib mới cung cấp các công cụ để kiểm tra các chú thích bị trì hoãn. Các chú thích có thể được đánh giá ở định dạng VALUE (đánh giá các chú thích theo giá trị thời gian chạy, tương tự như hành vi trong các phiên bản Python trước đó), định dạng FORWARDREF (thay thế các tên không xác định bằng các dấu đặc biệt) và định dạng STRING (trả về các chú thích dưới dạng chuỗi).

Ví dụ này cho thấy các định dạng này hoạt động như thế nào:

>>> từ nhập chú thíchlib get_annotations, Định dạng
>>> def func(arg: Không xác định):
... vượt qua
>>> get_annotations(func, format=Format.VALUE)
Traceback (cuộc gọi gần đây nhất):
  ...
NameError: tên 'Không xác định' không được xác định
>>> get_annotations(func, format=Format.FORWARDREF)
{'arg': ForwardRef('Unknown', owner=<function func at 0x...>)}
>>> get_annotations(func, format=Format.STRING)
{'arg': 'Không xác định'}

Phần porting chứa hướng dẫn về những thay đổi có thể cần thiết do những thay đổi này, mặc dù trong phần lớn các trường hợp, mã sẽ tiếp tục hoạt động như cũ.

(Được đóng góp bởi Jelle Zijlstra trong PEP 749gh-119180; PEP 649 được viết bởi Larry Hastings.)

Xem thêm

PEP 649

Đánh giá trì hoãn các chú thích bằng cách sử dụng bộ mô tả

PEP 749

Đang triển khai PEP 649

PEP 734: Nhiều trình thông dịch trong thư viện chuẩn

Thời gian chạy CPython hỗ trợ chạy đồng thời nhiều bản sao Python trong cùng một quy trình và đã hoạt động như vậy trong hơn 20 năm. Mỗi bản sao riêng biệt này được gọi là 'thông dịch viên'. Tuy nhiên, tính năng này chỉ có trên C-API.

Hạn chế đó được loại bỏ trong Python 3.14 với mô-đun concurrent.interpreters mới.

Có ít nhất hai lý do đáng chú ý khiến việc sử dụng nhiều phiên dịch viên mang lại những lợi ích đáng kể:

  • họ hỗ trợ một mô hình tương tranh mới (với Python), thân thiện với con người

  • song song đa lõi thực sự

Đối với một số trường hợp sử dụng, tính đồng thời trong phần mềm sẽ cải thiện hiệu quả và có thể đơn giản hóa thiết kế ở mức cao. Đồng thời, việc triển khai và duy trì tất cả trừ sự đồng thời đơn giản nhất thường là một cuộc đấu tranh của bộ não con người. Điều đó đặc biệt áp dụng cho các luồng đơn giản (ví dụ: threading), trong đó tất cả bộ nhớ được chia sẻ giữa tất cả các luồng.

Với nhiều trình thông dịch riêng biệt, bạn có thể tận dụng một lớp mô hình đồng thời, như Quy trình tuần tự giao tiếp (CSP) hoặc mô hình diễn viên, đã thành công trong các ngôn ngữ lập trình khác, như Smalltalk, Erlang, Haskell và Go. Hãy coi nhiều trình thông dịch là các chuỗi nhưng có tính năng chia sẻ tùy chọn.

Về tính song song đa lõi: kể từ Python 3.12, các trình thông dịch hiện đã đủ tách biệt với nhau để có thể sử dụng song song (xem PEP 684). Điều này mở ra nhiều trường hợp sử dụng chuyên sâu về CPU cho Python vốn bị giới hạn bởi GIL.

Việc sử dụng nhiều trình thông dịch cũng tương tự như multiprocessing theo nhiều cách, ở chỗ cả hai đều cung cấp các "quy trình" logic riêng biệt có thể chạy song song và không chia sẻ theo mặc định. Tuy nhiên, khi sử dụng nhiều trình thông dịch, một ứng dụng sẽ sử dụng ít tài nguyên hệ thống hơn và sẽ hoạt động hiệu quả hơn (vì nó vẫn nằm trong cùng một quy trình). Hãy coi nhiều trình thông dịch giống như việc tách biệt các tiến trình với hiệu quả của các luồng.

Mặc dù tính năng này đã xuất hiện trong nhiều thập kỷ nhưng nhiều trình thông dịch vẫn chưa được sử dụng rộng rãi do mức độ nhận thức thấp và thiếu mô-đun thư viện tiêu chuẩn. Do đó, chúng hiện có một số hạn chế đáng chú ý, dự kiến ​​sẽ cải thiện đáng kể khi tính năng này trở nên phổ biến.

Hạn chế hiện tại:

  • khởi động mỗi trình thông dịch chưa được tối ưu hóa

  • mỗi trình thông dịch sử dụng nhiều bộ nhớ hơn mức cần thiết (công việc tiếp tục chia sẻ nội bộ rộng rãi giữa các trình thông dịch)

  • không có nhiều tùy chọn yet để thực sự chia sẻ các đối tượng hoặc dữ liệu khác giữa các trình thông dịch (ngoài memoryview)

  • nhiều mô-đun mở rộng của bên thứ ba trên PyPI chưa tương thích với nhiều trình thông dịch (tất cả các mô-đun mở rộng thư viện tiêu chuẩn đều tương thích với are)

  • Hiện tại, cách tiếp cận để viết các ứng dụng sử dụng nhiều trình thông dịch riêng biệt hầu như vẫn còn xa lạ đối với người dùng Python.

Tác động của những hạn chế này sẽ phụ thuộc vào các cải tiến CPython trong tương lai, cách sử dụng trình thông dịch và những gì cộng đồng giải quyết thông qua các gói PyPI. Tùy thuộc vào trường hợp sử dụng, những hạn chế có thể không ảnh hưởng nhiều, vì vậy hãy dùng thử!

Hơn nữa, các bản phát hành CPython trong tương lai sẽ giảm hoặc loại bỏ chi phí hoạt động và cung cấp các tiện ích ít phù hợp hơn trên PyPI. Trong khi chờ đợi, hầu hết các hạn chế cũng có thể được giải quyết thông qua các mô-đun mở rộng, nghĩa là các gói PyPI có thể lấp đầy mọi khoảng trống trong phiên bản 3.14 và thậm chí quay trở lại phiên bản 3.12, nơi các trình thông dịch cuối cùng đã được cách ly đúng cách và ngừng chia sẻ GIL. Tương tự như vậy, các thư viện trên PyPI dự kiến ​​​​sẽ xuất hiện để cung cấp các bản tóm tắt cấp cao dựa trên các trình thông dịch.

Về các mô-đun mở rộng, công việc đang được tiến hành để cập nhật một số dự án PyPI, cũng như các công cụ như Cython, pybind11, nanobind và PyO3. Các bước cách ly mô-đun mở rộng có tại Cách ly các mô-đun mở rộng. Việc cô lập một mô-đun có nhiều điểm trùng lặp với những gì cần thiết để hỗ trợ free-threading, vì vậy công việc đang diễn ra trong cộng đồng trong lĩnh vực đó sẽ giúp đẩy nhanh quá trình hỗ trợ cho nhiều phiên dịch viên.

Cũng được thêm vào trong 3.14: concurrent.futures.InterpreterPoolExecutor.

(Được đóng góp bởi Eric Snow trong gh-134939.)

Xem thêm

PEP 734

PEP 750: Chuỗi ký tự mẫu

Chuỗi mẫu là một cơ chế mới để xử lý chuỗi tùy chỉnh. Chúng có chung cú pháp quen thuộc của chuỗi f nhưng, không giống như chuỗi f, trả về một đối tượng biểu thị các phần tĩnh và nội suy của chuỗi, thay vì một str đơn giản.

Để viết chuỗi chữ T, hãy sử dụng tiền tố 't' thay vì 'f':

>>> đa dạng = 'Stilton'
>>> template = t'Hãy thử một ít pho mát {nhiều loại}!'
>>> loại(mẫu)
<class 'string.templatelib.Template'>

Các đối tượng Template cung cấp quyền truy cập vào các phần tĩnh và nội suy (trong dấu ngoặc nhọn) của chuỗi before mà chúng được kết hợp. Lặp lại các phiên bản Template để truy cập các phần của chúng theo thứ tự:

>>> danh sách(mẫu)
['Thử một ít ', Nội suy('Stilton', 'đa dạng', Không, ''), ' phô mai!']

Thật dễ dàng để viết (hoặc gọi) mã để xử lý các phiên bản Template. Ví dụ: đây là một hàm hiển thị chữ thường của các phần tĩnh và chữ hoa của các trường hợp Interpolation:

từ nội suy nhập chuỗi.templatelib

def low_upper(mẫu):
    """Hiển thị phần tĩnh bằng chữ thường và phần nội suy viết hoa."""
    bộ phận = []
    cho một phần trong mẫu:
        if isinstance(phần, Nội suy):
            parts.append(str(part.value).upper())
        khác:
            parts.append(part.low())
    return ''.join(phần)

tên = 'Wenslydale'
mẫu = t'Mister {name}'
khẳng định low_upper(template) == 'mister WENSLYDALE'

Vì các phiên bản Template phân biệt giữa chuỗi tĩnh và nội suy trong thời gian chạy nên chúng có thể hữu ích trong việc dọn dẹp dữ liệu đầu vào của người dùng. Viết một hàm html() thoát khỏi thao tác nhập của người dùng trong HTML là một bài tập dành cho người đọc! Mã xử lý mẫu có thể mang lại tính linh hoạt được cải thiện. Ví dụ: hàm html() nâng cao hơn có thể chấp nhận dict thuộc tính HTML trực tiếp trong mẫu:

thuộc tính = {'src': 'limburger.jpg', 'alt': 'phô mai đáng yêu'}
mẫu = t'<img {thuộc tính}>'
khẳng định html(template) == '<img src="limburger.jpg" alt="pho mát đáng yêu" />'

Tất nhiên, mã xử lý mẫu không cần trả về kết quả dạng chuỗi. Một html() nâng cao thậm chí more có thể trả về một loại tùy chỉnh đại diện cho cấu trúc giống DOM.

Với các chuỗi t, các nhà phát triển có thể viết các hệ thống khử trùng SQL, thực hiện các hoạt động shell an toàn, cải thiện việc ghi nhật ký, xử lý các ý tưởng hiện đại trong phát triển web (HTML, CSS, v.v.) và triển khai DSL kinh doanh tùy chỉnh nhẹ.

(Được đóng góp bởi Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono, Lysandros Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt Tran và Pablo Galindo Salgado trong gh-132661.)

Xem thêm

PEP 750.

PEP 768: Giao diện gỡ lỗi bên ngoài an toàn

Python 3.14 giới thiệu giao diện gỡ lỗi không tốn phí, cho phép trình gỡ lỗi và trình lược tả đính kèm một cách an toàn vào các quy trình Python đang chạy mà không cần dừng hoặc khởi động lại chúng. Đây là một cải tiến đáng kể đối với khả năng sửa lỗi của Python, có nghĩa là các lựa chọn thay thế không an toàn không còn cần thiết nữa.

Giao diện mới cung cấp các điểm thực thi an toàn để đính kèm mã trình gỡ lỗi mà không sửa đổi đường dẫn thực thi thông thường của trình thông dịch hoặc thêm bất kỳ chi phí nào khi chạy. Do đó, giờ đây các công cụ có thể kiểm tra và tương tác với các ứng dụng Python trong thời gian thực, đây là một khả năng quan trọng đối với các hệ thống và môi trường sản xuất có tính sẵn sàng cao.

Để thuận tiện, giao diện này được triển khai trong chức năng sys.remote_exec(). Ví dụ:

hệ thống nhập khẩu
từ nhập tempfile NamedTemporaryFile

với NamedTemporaryFile(mode='w', suffix='.py', delete=False)  f:
    script_path = f.name
    f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')

# Execute đang xử lý với PID 1234
print('Kìa! Một lễ vật:')
sys.remote_exec(1234, script_path)

Hàm này cho phép gửi mã Python để thực thi trong quy trình đích tại điểm thực thi an toàn tiếp theo. Tuy nhiên, tác giả công cụ cũng có thể triển khai giao thức trực tiếp như được mô tả trong PEP, trong đó nêu chi tiết các cơ chế cơ bản được sử dụng để gắn một cách an toàn vào các quy trình đang chạy.

Giao diện gỡ lỗi đã được thiết kế cẩn thận chú trọng đến tính bảo mật và bao gồm một số cơ chế để kiểm soát quyền truy cập:

(Được đóng góp bởi Pablo Galindo Salgado, Matt Wozniski và Ivona Stojanovic trong gh-131591.)

Xem thêm

PEP 768.

Một loại thông dịch viên mới

Một loại trình thông dịch mới đã được thêm vào CPython. Nó sử dụng các lệnh gọi đuôi giữa các hàm C nhỏ để triển khai các mã Python riêng lẻ, thay vì một câu lệnh C case lớn. Đối với một số trình biên dịch mới hơn, trình thông dịch này cung cấp hiệu suất tốt hơn đáng kể. Điểm chuẩn sơ bộ cho thấy giá trị trung bình hình học nhanh hơn 3-5% trên bộ điểm chuẩn pyperformance tiêu chuẩn, tùy thuộc vào nền tảng và kiến ​​trúc. Cơ sở là Python 3.14 được xây dựng bằng Clang 19, không có trình thông dịch mới này.

Trình thông dịch này hiện chỉ hoạt động với Clang 19 trở lên trên kiến trúc x86-64 và AArch64. Tuy nhiên, phiên bản GCC trong tương lai dự kiến ​​cũng sẽ hỗ trợ điều này.

Tính năng này hiện được chọn tham gia. Bạn nên bật tối ưu hóa theo hướng dẫn cấu hình khi sử dụng trình thông dịch mới vì đây là cấu hình duy nhất đã được kiểm tra và xác thực để cải thiện hiệu suất. Để biết thêm thông tin, xem --with-tail-call-interp.

Ghi chú

Đừng nhầm lẫn điều này với tail call optimization của các hàm Python, hiện không được triển khai trong CPython.

Loại trình thông dịch mới này là chi tiết triển khai nội bộ của trình thông dịch CPython. Nó hoàn toàn không thay đổi hành vi hiển thị của các chương trình Python. Nó có thể cải thiện hiệu suất của họ, nhưng không thay đổi bất cứ điều gì khác.

(Được đóng góp bởi Ken Jin trong gh-128563, với các ý tưởng về cách triển khai điều này trong CPython của Mark Shannon, Garrett Gu, Haoran Xu và Josh Haberman.)

Cải tiến chế độ luồng miễn phí

Chế độ luồng tự do của CPython (PEP 703), ban đầu được thêm vào trong 3.13, đã được cải thiện đáng kể trong Python 3.14. Quá trình triển khai được mô tả trong PEP 703 đã hoàn tất, bao gồm các thay đổi về C API và các giải pháp tạm thời trong trình thông dịch đã được thay thế bằng các giải pháp lâu dài hơn. Trình thông dịch thích ứng chuyên dụng (PEP 659) hiện được bật ở chế độ luồng tự do, cùng với nhiều tối ưu hóa khác giúp cải thiện đáng kể hiệu suất của nó. Mức phạt hiệu suất đối với mã đơn luồng ở chế độ luồng tự do hiện là khoảng 5-10%, tùy thuộc vào nền tảng và trình biên dịch C được sử dụng.

Từ Python 3.14, khi biên dịch các mô-đun mở rộng cho bản dựng CPython theo luồng tự do trên Windows, biến tiền xử lý Py_GIL_DISABLED giờ đây cần được chỉ định bởi chương trình phụ trợ bản dựng vì biến này sẽ không còn được trình biên dịch C xác định tự động nữa. Đối với trình thông dịch đang chạy, có thể tìm thấy cài đặt được sử dụng tại thời điểm biên dịch bằng sysconfig.get_config_var().

Cờ -X context_aware_warnings mới sẽ kiểm soát nếu concurrent safe warnings control được bật. Cờ mặc định là true đối với bản dựng có luồng tự do và sai đối với bản dựng hỗ trợ GIL.

Một cờ thread_inherit_context mới đã được thêm vào, nếu được bật có nghĩa là các luồng được tạo bằng threading.Thread sẽ bắt đầu bằng một bản sao Context() của người gọi start(). Đáng kể nhất, điều này làm cho bối cảnh lọc cảnh báo do catch_warnings thiết lập được "kế thừa" bởi các luồng (hoặc tác vụ không đồng bộ) được bắt đầu trong bối cảnh đó. Nó cũng ảnh hưởng đến các mô-đun khác sử dụng biến ngữ cảnh, chẳng hạn như trình quản lý bối cảnh decimal. Cờ này mặc định là true đối với bản dựng có luồng tự do và sai đối với bản dựng hỗ trợ GIL.

(Được đóng góp bởi Sam Gross, Matt Page, Neil Schenauer, Thomas Wouters, Donghee Na, Kirill Podoprigora, Ken Jin, Itamar Oren, Brett Simmers, Dino Viehland, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou, Kumar Aditya, Edgar Margffoy và nhiều người khác. Một số cộng tác viên này được Meta tuyển dụng, công ty đã tiếp tục cung cấp các nguồn lực kỹ thuật quan trọng để hỗ trợ dự án này.)

Thông báo lỗi được cải thiện

  • Trình thông dịch hiện cung cấp các đề xuất hữu ích khi phát hiện lỗi chính tả trong từ khóa Python. Khi gặp một từ gần giống với từ khóa Python, trình thông dịch sẽ gợi ý từ khóa chính xác trong thông báo lỗi. Tính năng này giúp lập trình viên nhanh chóng xác định và sửa các lỗi đánh máy thường gặp. Ví dụ:

    >>> trong khi Đúng:
    ... vượt qua
    Traceback (cuộc gọi gần đây nhất):
      Tệp "<stdin>", dòng 1
        trong khi Đúng:
        ^^ ^^ ^^
    Lỗi cú pháp: cú pháp không hợp lệ. Ý bạn là 'trong khi'?
    

    Mặc dù tính năng này tập trung vào các trường hợp phổ biến nhất nhưng một số biến thể lỗi chính tả vẫn có thể dẫn đến lỗi cú pháp thông thường. (Được đóng góp bởi Pablo Galindo trong gh-132449.)

  • Các câu lệnh elif theo sau khối else hiện có thông báo lỗi cụ thể. (Được đóng góp bởi Steele Farnsworth trong gh-129902.)

    >>> nếu ai == "tôi":
    ... print("Là tôi đây!")
    ... khác:
    ... print("Không phải tôi!")
    ... Elif  ai Không :
    ... print("Đó là ai?")
    Tệp "<stdin>", dòng 5
      Elif là ai:
      ^^ ^^
    Cú phápError: khối 'elif' theo sau khối 'else'
    
  • Nếu một câu lệnh được chuyển tới biểu thức điều kiện sau else hoặc một trong pass, break hoặc continue được chuyển trước if thì thông báo lỗi sẽ nêu bật nơi bắt buộc phải có expression. (Được đóng góp bởi Sergey Miryanov trong gh-129515.)

    >>> x = 1 nếu Đúng, ngược lại đạt
    Traceback (cuộc gọi gần đây nhất):
      Tệp "<string>", dòng 1
        x = 1 nếu Đúng, ngược lại đạt
                           ^^ ^^
    Lỗi Cú pháp: biểu thức được mong đợi sau 'else', nhưng câu lệnh được đưa ra
    
    >>> x = tiếp tục nếu True khác bị hỏng
    Traceback (cuộc gọi gần đây nhất):
      Tệp "<string>", dòng 1
        x = tiếp tục nếu True khác bị hỏng
            ^^ ^^ ^^ ^^
    Lỗi cú pháp: biểu thức dự kiến ​​trước 'if', nhưng câu lệnh được đưa ra
    
  • Khi phát hiện các chuỗi đóng không chính xác, thông báo lỗi gợi ý rằng chuỗi đó có thể được dự định là một phần của chuỗi. (Được đóng góp bởi Pablo Galindo trong gh-88535.)

    >>> "Đối tượng thú vị "Đối tượng quan trọng" rất quan trọng"
    Traceback (cuộc gọi gần đây nhất):
    Lỗi cú pháp: cú pháp không hợp lệ. Đây có phải là một phần của chuỗi không?
    
  • Khi chuỗi có tiền tố không tương thích, lỗi sẽ hiển thị tiền tố nào không tương thích. (Được đóng góp bởi Nikita Sobolev trong gh-133197.)

    >>> ub'abc'
      Tệp "<python-input-0>", dòng 1
        ub'abc'
        ^^
    Lỗi cú pháp: tiền tố 'u' và 'b' không tương thích
    
  • Cải thiện thông báo lỗi khi sử dụng as với các mục tiêu không tương thích trong:

    • Nhập khẩu: import ... as ...

    • Từ nhập khẩu: from ... import ... as ...

    • Ngoại trừ trình xử lý: except ... as ...

    • Các trường hợp khớp mẫu: case ... as ...

    (Được đóng góp bởi Nikita Sobolev trong gh-123539, gh-123562gh-123440.)

  • Cải thiện thông báo lỗi khi cố gắng thêm một phiên bản của loại không thể băm vào dict hoặc set. (Được đóng góp bởi CF Bolz-Tereick và Victor Stinner trong gh-132828.)

    >>> s = set()
    >>> s.add({'pages': 12, 'grade': 'A'})
    Traceback (cuộc gọi gần đây nhất):
      Tệp "<python-input-1>", dòng 1, trong <module>
        s.add({'pages': 12, 'grade': 'A'})
        ~~~~^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
    TypeError: không thể sử dụng 'dict' làm phần tử được đặt (loại không thể xóa: 'dict')
    >>> d = {}
    >>> l = [1, 2, 3]
    >>> d[l] = 12
    Traceback (cuộc gọi gần đây nhất):
      Tệp "<python-input-4>", dòng 1, trong <module>
        d[l] = 12
        ~^^^
    TypeError: không thể sử dụng 'danh sách' làm khóa chính tả (loại không thể xóa: 'danh sách')
    
  • Thông báo lỗi được cải thiện khi một đối tượng hỗ trợ giao thức quản lý bối cảnh đồng bộ được nhập bằng async with thay vì with và ngược lại đối với giao thức quản lý bối cảnh không đồng bộ. (Được đóng góp bởi Bénédikt Trần trong gh-128398.)

PEP 784: Hỗ trợ tiêu chuẩn Z trong thư viện chuẩn

Gói compression mới chứa các mô-đun compression.lzma, compression.bz2, compression.gzipcompression.zlib tái xuất các mô-đun lzma, bz2, gzipzlib tương ứng. Tên nhập mới trong compression là tên ưa thích để nhập các mô-đun nén này từ Python 3.14. Tuy nhiên, tên mô-đun hiện tại không bị phản đối. Mọi hoạt động ngừng sử dụng hoặc loại bỏ các mô-đun nén hiện có sẽ diễn ra không sớm hơn 5 năm sau khi phát hành phiên bản 3.14.

Mô-đun compression.zstd mới cung cấp các API nén và giải nén cho định dạng Zstandard thông qua các liên kết với Meta's zstd library. Zstandard là một định dạng nén nhanh, hiệu quả cao và được áp dụng rộng rãi. Ngoài các API được giới thiệu trong compression.zstd, hỗ trợ đọc và ghi các kho lưu trữ nén Zstandard đã được thêm vào các mô-đun tarfile, zipfileshutil.

Đây là ví dụ về việc sử dụng mô-đun mới để nén một số dữ liệu:

từ nhập nén zstd
nhập toán

dữ liệu = str(math.pi).encode() * 20
đã nén = zstd.compress(dữ liệu)
tỷ lệ = len(nén) / len(dữ liệu)
print(f"Đã đạt được tỷ lệ nén là {ratio}")

Có thể thấy, API tương tự như API của các mô-đun lzmabz2.

(Được đóng góp bởi Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas Roun, Victor Stinner và Rogdham trong gh-132983.)

Xem thêm

PEP 784.

Khả năng xem xét nội tâm của Asyncio

Đã thêm giao diện dòng lệnh mới để kiểm tra các quy trình Python đang chạy bằng các tác vụ không đồng bộ, có sẵn qua python -m asyncio ps PID hoặc python -m asyncio pstree PID.

Lệnh con ps kiểm tra ID tiến trình đã cho (PID) và hiển thị thông tin về các tác vụ asyncio hiện đang chạy. Nó xuất ra một bảng nhiệm vụ: một danh sách phẳng gồm tất cả các nhiệm vụ, tên của chúng, ngăn xếp coroutine của chúng và những nhiệm vụ đang chờ chúng.

Lệnh con pstree tìm nạp thông tin tương tự nhưng thay vào đó hiển thị cây lệnh gọi không đồng bộ trực quan, hiển thị các mối quan hệ coroutine ở định dạng phân cấp. Lệnh này đặc biệt hữu ích để gỡ lỗi các chương trình không đồng bộ chạy lâu hoặc bị kẹt. Nó có thể giúp các nhà phát triển nhanh chóng xác định vị trí chương trình bị chặn, nhiệm vụ nào đang chờ xử lý và cách các coroutine được kết nối với nhau.

Ví dụ đưa ra mã này:

nhập asyncio

async def play_track(track):
    đang chờ asyncio.sleep(5)
    print(f'🎵 Đã hoàn thành: {track}')

async def play_album(tên, bài hát):
    không đồng bộ với asyncio.TaskGroup() dưới dạng tg:
        cho bài hát trong bài hát:
            tg.create_task(play_track(track), name=track)

async def main():
    không đồng bộ với asyncio.TaskGroup() dưới dạng tg:
        tg.create_task(
          play_album('Chủ nhật', ['TNDNBTG', 'Levitate']),
          name='Chủ nhật')
        tg.create_task(
          play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
          tên='TMBTE')

nếu __name__ == '__main__':
    asyncio.run(chính())

Việc thực thi công cụ mới trong quá trình đang chạy sẽ mang lại một bảng như thế này:

trăn -m asyncio ps 12345

tid id nhiệm vụ tên nhiệm vụ coroutine ngăn xếp chuỗi chờ đợi tên người chờ id chờ đợi
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1935500 0x7fc930c18050 Nhóm tác vụ-1._aexit -> Nhóm tác vụ.__aexit__ -> 0x0 chính
1935500 0x7fc930c18230 Nhóm tác vụ chủ nhật._aexit -> TaskGroup.__aexit__ -> album TaskGroup._aexit -> TaskGroup.__aexit__ -> Nhiệm vụ chính-1 0x7fc930c18050
1935500 0x7fc93173fa50 TMBTE Nhóm tác vụ._aexit -> Nhóm tác vụ.__aexit__ -> album Nhóm tác vụ._aexit -> Nhóm tác vụ.__aexit__ -> Nhiệm vụ chính-1 0x7fc930c18050
1935500 0x7fc93173fdf0 TNDNBTG ngủ -> chơi TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c18230
1935500 0x7fc930d32510 Bay lên ngủ -> chơi TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c18230
1935500 0x7fc930d32890 DYWTYLM ngủ -> chơi TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa50
1935500 0x7fc93161ec30 Aqua Regia ngủ -> chơi TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa50

hoặc một cái cây như thế này:

python -m asyncio pstree 12345

└── (T) Nhiệm vụ-1
    └──  dụ chính.py:13
        └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
            └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                ├── (T) Hoàng hôn
                 └── album example.py:8
                 └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                 └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                 ├── (T) TNDNBTG
                  └── chơi example.py:4
                  └── ngủ Lib/asyncio/tasks.py:702
                 └── (T) Bay lên
                 └── chơi example.py:4
                 └── ngủ Lib/asyncio/tasks.py:702
                └── (T) TMBTE
                    └── album example.py:8
                        └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                            └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                                ├── (T) DYWTYLM
                                 └── chơi example.py:4
                                 └── ngủ Lib/asyncio/tasks.py:702
                                └── (T) Nước cường toan
                                    └── chơi example.py:4
                                        └── ngủ Lib/asyncio/tasks.py:702

Nếu phát hiện thấy một chu trình trong biểu đồ chờ không đồng bộ (có thể chỉ ra sự cố lập trình), công cụ sẽ báo lỗi và liệt kê các đường dẫn chu trình ngăn cản việc xây dựng cây:

python -m asyncio pstree 12345

ERROR: wait-graph chứa chu trình - không thể in cây!

chu kỳ: Nhiệm vụ-2  Nhiệm vụ-3  Nhiệm vụ-2

(Được đóng góp bởi Pablo Galindo, Łukasz Langa, Yury Selivanov và Marta Gomez Macias trong gh-91048.)

Kiểm soát cảnh báo an toàn đồng thời

Trình quản lý ngữ cảnh warnings.catch_warnings giờ đây sẽ tùy chọn sử dụng biến ngữ cảnh cho các bộ lọc cảnh báo. Điều này được kích hoạt bằng cách đặt cờ context_aware_warnings, bằng tùy chọn dòng lệnh -X hoặc biến môi trường. Điều này mang lại khả năng kiểm soát cảnh báo có thể dự đoán được khi sử dụng catch_warnings kết hợp với nhiều luồng hoặc tác vụ không đồng bộ. Cờ mặc định là true đối với bản dựng có luồng tự do và sai đối với bản dựng hỗ trợ GIL.

(Được đóng góp bởi Neil Schenauer và Kumar Aditya trong gh-130010.)

Những thay đổi ngôn ngữ khác

  • Tất cả các trang mã Windows hiện được hỗ trợ dưới dạng codec 'cpXXX' trên Windows. (Được đóng góp bởi Serhiy Storchaka trong gh-123803.)

  • Triển khai các quy tắc số học ở chế độ hỗn hợp kết hợp số thực và số phức theo quy định của tiêu chuẩn C kể từ C99. (Được đóng góp bởi Sergey B Kirpichev trong gh-69639.)

  • Hiện tại, nhiều lỗi cú pháp hơn đã được phát hiện bất kể việc tối ưu hóa và tùy chọn dòng lệnh -O. Điều này bao gồm việc ghi vào __debug__, sử dụng await không chính xác và hiểu không đồng bộ bên ngoài các hàm không đồng bộ. Ví dụ: python -O -c 'assert (__debug__ := 1)' hoặc python -O -c 'assert await 1' hiện tạo ra SyntaxErrors. (Được đóng góp bởi Irit Katriel và Jelle Zijlstra trong gh-122245 & gh-121637.)

  • Khi phân lớp loại C thuần túy, các vị trí C cho loại mới không còn được thay thế bằng phiên bản được bao bọc khi tạo lớp nếu chúng không bị ghi đè rõ ràng trong lớp con. (Được đóng góp bởi Tomasz Pytel trong gh-132284.)

Tích hợp sẵn

  • Các phương thức bytes.fromhex()bytearray.fromhex() hiện chấp nhận ASCII bytesbytes-like objects. (Được đóng góp bởi Daniel Pope trong gh-129349.)

  • Thêm các phương thức lớp float.from_number()complex.from_number() để chuyển đổi một số thành loại float hoặc complex tương ứng. Họ đưa ra TypeError nếu đối số không phải là số thực. (Được đóng góp bởi Serhiy Storchaka trong gh-84978.)

  • Hỗ trợ dấu gạch dưới và dấu phẩy dưới dạng dấu phân cách hàng nghìn trong phần phân số cho các kiểu trình bày dấu phẩy động của định dạng chuỗi kiểu mới (với format() hoặc dây f). (Được đóng góp bởi Sergey B Kirpichev trong gh-87790.)

  • Hàm int() không còn ủy quyền cho __trunc__() nữa. Các lớp muốn hỗ trợ chuyển đổi sang int() phải triển khai __int__() hoặc __index__(). (Được đóng góp bởi Mark Dickinson trong gh-119743.)

  • Hàm map() hiện có cờ strict chỉ dành cho từ khóa tùy chọn như zip() để kiểm tra xem tất cả các vòng lặp có độ dài bằng nhau hay không. (Được đóng góp bởi Wannes Boeykens trong gh-119793.)

  • Loại memoryview hiện hỗ trợ đăng ký, biến nó thành generic type. (Được đóng góp bởi Brian Schubert trong gh-126012.)

  • Việc sử dụng NotImplemented trong ngữ cảnh boolean giờ đây sẽ tạo ra TypeError. Điều này đã tăng DeprecationWarning kể từ Python 3.9. (Được đóng góp bởi Jelle Zijlstra trong gh-118767.)

  • pow() ba đối số hiện thử gọi __rpow__() nếu cần. Trước đây nó chỉ được gọi trong pow() hai đối số và toán tử lũy thừa nhị phân. (Được đóng góp bởi Serhiy Storchaka trong gh-130104.)

  • Các đối tượng super hiện là copyablepickleable. (Được đóng góp bởi Serhiy Storchaka trong gh-125767.)

Dòng lệnh và môi trường

  • Cờ thời gian nhập hiện có thể theo dõi các mô-đun đã được tải ('được lưu trong bộ nhớ đệm'), thông qua -X importtime=2 mới. Khi một mô-đun như vậy được nhập, thời gian selfcumulative được thay thế bằng chuỗi cached.

    Các giá trị trên 2 cho -X importtime hiện được dành riêng để sử dụng trong tương lai.

    (Được đóng góp bởi Noah Kim và Adam Turner trong gh-118655.)

  • Tùy chọn dòng lệnh -c hiện tự động rút lui đối số mã của nó trước khi thực thi. Hành vi tự động thụt lề phản chiếu textwrap.dedent(). (Được đóng góp bởi Jon Crall và Steven Sun trong gh-103998.)

  • -J không còn là cờ dành riêng cho Jython và giờ không còn ý nghĩa gì đặc biệt nữa. (Được đóng góp bởi Adam Turner trong gh-133336.)

PEP 758: Cho phép biểu thức exceptexcept* không có dấu ngoặc

Các biểu thức exceptexcept* hiện cho phép bỏ qua dấu ngoặc khi có nhiều loại ngoại lệ và mệnh đề as không được sử dụng. Ví dụ:

thử:
    kết nối_to_server()
ngoại trừ TimeoutError, ConnectionRefusedError:
    print('Mạng đã ngừng hoạt động!')

(Được đóng góp bởi Pablo Galindo và Brett Cannon trong PEP 758gh-131831.)

PEP 765: Điều khiển luồng trong khối finally

Trình biên dịch hiện phát ra SyntaxWarning khi câu lệnh return, break hoặc continue có tác dụng rời khỏi khối finally. Thay đổi này được chỉ định trong PEP 765.

Trong những trường hợp thay đổi này không thuận tiện (chẳng hạn như những trường hợp cảnh báo dư thừa do lỗi mã), warning filter có thể được sử dụng để tắt tất cả cảnh báo cú pháp bằng cách thêm ignore::SyntaxWarning làm bộ lọc. Điều này có thể được chỉ định kết hợp với bộ lọc chuyển đổi các cảnh báo khác thành lỗi (ví dụ: chuyển -Werror -Wignore::SyntaxWarning dưới dạng tùy chọn CLI hoặc cài đặt PYTHONWARNINGS=error,ignore::SyntaxWarning).

Lưu ý rằng việc áp dụng bộ lọc như vậy trong thời gian chạy bằng mô-đun warnings sẽ chỉ chặn cảnh báo trong mã được biên dịch after khi bộ lọc được điều chỉnh. Mã được biên dịch trước khi điều chỉnh bộ lọc (ví dụ: khi nhập mô-đun) sẽ vẫn phát ra cảnh báo cú pháp.

(Được đóng góp bởi Irit Katriel trong gh-130080.)

Thu gom rác tăng cường

Trình thu gom rác theo chu kỳ hiện đang tăng dần. Điều này có nghĩa là thời gian tạm dừng tối đa sẽ giảm đi một bậc hoặc nhiều hơn đối với các đống lớn hơn.

Bây giờ chỉ có hai thế hệ: trẻ và già. Khi gc.collect() không được gọi trực tiếp, GC sẽ được gọi ít thường xuyên hơn một chút. Khi được triệu tập, nó thu thập thế hệ trẻ và sự gia tăng của thế hệ cũ, thay vì thu thập một hoặc nhiều thế hệ.

Hoạt động của gc.collect() thay đổi một chút:

  • gc.collect(1): Thực hiện tăng cường thu thập rác thay vì thu thập thế hệ 1.

  • Các lệnh gọi tới gc.collect() khác không thay đổi.

(Được đóng góp bởi Mark Shannon trong gh-108362.)

Shell tương tác mặc định

  • Shell interactive mặc định hiện làm nổi bật cú pháp Python. Tính năng này được bật theo mặc định, hãy lưu nếu PYTHON_BASIC_REPL hoặc bất kỳ biến môi trường nào khác tắt màu được đặt. Xem Kiểm soát màu sắc để biết chi tiết.

    Chủ đề màu mặc định để làm nổi bật cú pháp cố gắng đạt được độ tương phản tốt và chỉ sử dụng mã màu ANSI tiêu chuẩn 4-bit VGA để có khả năng tương thích tối đa. Chủ đề có thể được tùy chỉnh bằng cách sử dụng API _colorize.set_theme() thử nghiệm. Điều này có thể được gọi một cách tương tác hoặc trong tập lệnh PYTHONSTARTUP. Lưu ý rằng chức năng này không đảm bảo tính ổn định và có thể thay đổi hoặc bị xóa.

    (Được đóng góp bởi Łukasz Langa trong gh-131507.)

  • Shell interactive mặc định hiện hỗ trợ tự động hoàn tất nhập. Điều này có nghĩa là việc gõ import co và nhấn <Tab> sẽ gợi ý các mô-đun bắt đầu bằng co. Tương tự, gõ from concurrent import i sẽ gợi ý các mô-đun con của concurrent bắt đầu bằng i. Lưu ý rằng tính năng tự động hoàn thành các thuộc tính mô-đun hiện không được hỗ trợ. (Được đóng góp bởi Tomas Roun trong gh-69605.)

Mô-đun mới

  • annotationlib: Để xem xét nội tâm annotations. Xem PEP 749 để biết thêm chi tiết. (Được đóng góp bởi Jelle Zijlstra trong gh-119180.)

  • compression (bao gồm compression.zstd): Gói dành cho các mô-đun liên quan đến nén, bao gồm một mô-đun mới để hỗ trợ định dạng nén Zstandard. Xem PEP 784 để biết thêm chi tiết. (Được đóng góp bởi Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas Roun, Victor Stinner và Rogdham trong gh-132983.)

  • concurrent.interpreters: Hỗ trợ nhiều trình thông dịch trong thư viện chuẩn. Xem PEP 734 để biết thêm chi tiết. (Được đóng góp bởi Eric Snow trong gh-134939.)

  • string.templatelib: Hỗ trợ các chuỗi ký tự mẫu (chuỗi t). Xem PEP 750 để biết thêm chi tiết. (Được đóng góp bởi Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono, Lysandros Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt Tran và Pablo Galindo Salgado trong gh-132661.)

Các mô-đun cải tiến

phân tích cú pháp

  • Giá trị mặc định của program name cho argparse.ArgumentParser hiện phản ánh cách trình thông dịch Python được hướng dẫn tìm mã mô-đun __main__. (Được đóng góp bởi Serhiy Storchaka và Alyssa Coghlan trong gh-66436.)

  • Đã giới thiệu tham số suggest_on_error tùy chọn cho argparse.ArgumentParser, cho phép đề xuất lựa chọn đối số và tên trình phân tích cú pháp con nếu người dùng nhập sai. (Được đóng góp bởi Savannah Ostrowski trong gh-124456.)

  • Bật màu cho văn bản trợ giúp, có thể tắt màu này bằng tham số color tùy chọn thành argparse.ArgumentParser. Điều này cũng có thể được kiểm soát bởi environment variables. (Được đóng góp bởi Hugo van Kemenade trong gh-130645.)

ast

  • Thêm compare(), một chức năng để so sánh hai AST. (Được đóng góp bởi Batuhan Taskaya và Jeremy Hylton trong gh-60191.)

  • Thêm hỗ trợ cho copy.replace() cho các nút AST. (Được đóng góp bởi Bénédikt Trần trong gh-121141.)

  • Các chuỗi tài liệu hiện đã bị xóa khỏi AST được tối ưu hóa ở cấp độ tối ưu hóa 2. (Được đóng góp bởi Irit Katriel trong gh-123958.)

  • Đầu ra repr() cho các nút AST hiện bao gồm nhiều thông tin hơn. (Được đóng góp bởi Tomas Roun trong gh-116022.)

  • Khi được gọi với AST làm đầu vào, hàm parse() hiện luôn xác minh rằng loại nút gốc là phù hợp. (Được đóng góp bởi Irit Katriel trong gh-130139.)

  • Thêm các tùy chọn mới vào giao diện dòng lệnh: --feature-version, --optimize--show-empty. (Được đóng góp bởi Semyon Moroz trong gh-133367.)

asyncio

  • Hàm và phương thức có tên create_task() hiện có danh sách đối số từ khóa tùy ý. Tất cả các đối số từ khóa được chuyển đến hàm tạo Task hoặc nhà máy tác vụ tùy chỉnh. (Xem set_task_factory() để biết chi tiết.) Các đối số từ khóa namecontext không còn đặc biệt nữa; bây giờ tên sẽ được đặt bằng cách sử dụng đối số từ khóa name của nhà máy và context có thể là None.

    Điều này ảnh hưởng đến chức năng và phương thức sau: asyncio.create_task(), asyncio.loop.create_task(), asyncio.TaskGroup.create_task().

    (Được đóng góp bởi Thomas Grainger trong gh-128307.)

  • Có hai chức năng tiện ích mới để xem xét nội tâm và in biểu đồ cuộc gọi của chương trình: capture_call_graph()print_call_graph(). Xem Asyncio introspection capabilities để biết thêm chi tiết. (Được đóng góp bởi Yury Selivanov, Pablo Galindo Salgado và Łukasz Langa trong gh-91048.)

lịch

  • Theo mặc định, ngày hôm nay được đánh dấu màu trong đầu ra văn bản command-line của calendar. Điều này có thể được kiểm soát bởi environment variables. (Được đóng góp bởi Hugo van Kemenade trong gh-128317.)

đồng thời.futures

  • Thêm một lớp thực thi mới, InterpreterPoolExecutor, hiển thị nhiều trình thông dịch Python trong cùng một quy trình ('trình thông dịch phụ') sang mã Python. Điều này sử dụng một nhóm trình thông dịch Python độc lập để thực hiện các cuộc gọi không đồng bộ.

    Điều này tách biệt với mô-đun interpreters mới được giới thiệu bởi PEP 734. (Được đóng góp bởi Eric Snow trong gh-124548.)

  • Trên các nền tảng Unix khác ngoài macOS, 'forkserver' hiện là start method mặc định cho ProcessPoolExecutor (thay thế 'fork'). Thay đổi này không ảnh hưởng đến Windows hoặc macOS, trong đó 'spawn' vẫn là phương thức khởi động mặc định.

    Nếu yêu cầu phương thức fork không tương thích luồng, bạn phải yêu cầu nó một cách rõ ràng bằng cách cung cấp bối cảnh đa xử lý mp_context cho ProcessPoolExecutor.

    Xem forkserver restrictions để biết thông tin và sự khác biệt với phương pháp fork cũng như cách thay đổi này có thể ảnh hưởng đến mã hiện có với các biến chung có thể thay đổi và/hoặc đối tượng chia sẻ không thể tự động là pickled.

    (Được đóng góp bởi Gregory P. Smith trong gh-84559.)

  • Thêm hai phương thức mới vào ProcessPoolExecutor, terminate_workers()kill_workers(), như những cách để chấm dứt hoặc loại bỏ tất cả các quy trình Worker đang hoạt động trong nhóm nhất định. (Được đóng góp bởi Charles Machalow trong gh-130849.)

  • Thêm tham số buffersize tùy chọn vào Executor.map để giới hạn số lượng tác vụ đã gửi mà chưa mang lại kết quả. Nếu bộ đệm đầy, quá trình lặp qua iterables sẽ tạm dừng cho đến khi có kết quả từ bộ đệm. (Được đóng góp bởi Enzo Bonnal và Josh Rosenberg trong gh-74028.)

trình phân tích cú pháp cấu hình

  • configparser sẽ không còn ghi các tập tin cấu hình mà nó không thể đọc được nữa để cải thiện tính bảo mật. Việc cố gắng sử dụng các phím write() chứa dấu phân cách hoặc bắt đầu bằng mẫu tiêu đề phần sẽ tạo ra InvalidWriteError. (Được đóng góp bởi Jacob Lincoln trong gh-129270.)

bối cảnh

ctypes

  • Bố cục của bit fields trong các đối tượng StructureUnion hiện gần khớp hơn với các giá trị mặc định của nền tảng (GCC/Clang hoặc MSVC). Đặc biệt, các trường không còn chồng chéo. (Được đóng góp bởi Matthias Görgens trong gh-97702.)

  • Thuộc tính lớp Structure._layout_ hiện có thể được đặt để giúp khớp với ABI không mặc định. (Được đóng góp bởi Petr Viktorin trong gh-97702.)

  • Lớp mô tả trường Structure/Union hiện có sẵn dưới dạng CField và có các thuộc tính mới để hỗ trợ gỡ lỗi và xem xét nội tâm. (Được đóng góp bởi Petr Viktorin trong gh-128715.)

  • Trên Windows, ngoại lệ COMError hiện được công khai. (Được đóng góp bởi Jun Komoda trong gh-126686.)

  • Trên Windows, chức năng CopyComPointer() hiện được công khai. (Được đóng góp bởi Jun Komoda trong gh-127275.)

  • Thêm memoryview_at(), một hàm để tạo đối tượng memoryview tham chiếu đến con trỏ và độ dài được cung cấp. Điều này hoạt động giống như ctypes.string_at() ngoại trừ việc nó tránh được bản sao bộ đệm và thường hữu ích khi triển khai các hàm gọi lại Python thuần túy được chuyển qua bộ đệm có kích thước động. (Được đóng góp bởi Rian Hunter trong gh-112018.)

  • Các loại phức tạp, c_float_complex, c_double_complexc_longdouble_complex, hiện có sẵn nếu cả trình biên dịch và thư viện libffi đều hỗ trợ các loại C phức tạp. (Được đóng góp bởi Sergey B Kirpichev trong gh-61103.)

  • Thêm ctypes.util.dllist() để liệt kê các thư viện dùng chung được quy trình hiện tại tải. (Được đóng góp bởi Brian Ward trong gh-119349.)

  • Di chuyển bộ đệm loại ctypes.POINTER() từ bộ đệm nội bộ chung (_pointer_type_cache) sang thuộc tính _CData.__pointer_type__ của loại ctypes tương ứng. Điều này sẽ ngăn bộ đệm phát triển không giới hạn trong một số trường hợp. (Được đóng góp bởi Sergey Miryanov trong gh-100926.)

  • Loại py_object hiện hỗ trợ đăng ký, biến nó thành generic type. (Được đóng góp bởi Brian Schubert trong gh-132168.)

  • ctypes hiện hỗ trợ free-threading builds. (Được đóng góp bởi Kumar Aditya và Peter Bierma trong gh-127945.)

chửi rủa

ngày giờ

số thập phân

  • Thêm Decimal.from_number() làm hàm tạo thay thế cho Decimal. (Được đóng góp bởi Serhiy Storchaka trong gh-121798.)

  • Hiển thị IEEEContext() để hỗ trợ tạo ngữ cảnh tương ứng với các định dạng trao đổi thập phân IEEE 754 (2008). (Được đóng góp bởi Sergey B Kirpichev trong gh-53032.)

khuếch tán

  • Các trang so sánh có những thay đổi được đánh dấu do lớp HtmlDiff tạo ra hiện hỗ trợ 'chế độ tối'. (Được đóng góp bởi Jiahao Li trong gh-129939.)

dis

  • Thêm hỗ trợ hiển thị thông tin vị trí nguồn đầy đủ của instructions, thay vì chỉ số dòng. Tính năng này được thêm vào các giao diện sau thông qua đối số từ khóa show_positions:

    Tính năng này cũng được hiển thị thông qua dis --show-positions. (Được đóng góp bởi Bénédikt Trần trong gh-123165.)

  • Thêm tùy chọn dòng lệnh dis --specialized để hiển thị mã byte chuyên dụng. (Được đóng góp bởi Bénédikt Trần trong gh-127413.)

không có lỗi

  • Thêm hằng số mã lỗi EHWPOISON. (Được đóng góp bởi James Roy trong gh-126585.)

người xử lý lỗi

fnmatch

  • Thêm filterfalse(), một chức năng từ chối các tên khớp với một mẫu nhất định. (Được đóng góp bởi Bénédikt Trần trong gh-74598.)

phân số

  • Bây giờ, một đối tượng Fraction có thể được xây dựng từ bất kỳ đối tượng nào bằng phương thức as_integer_ratio(). (Được đóng góp bởi Serhiy Storchaka trong gh-82017.)

  • Thêm Fraction.from_number() làm hàm tạo thay thế cho Fraction. (Được đóng góp bởi Serhiy Storchaka trong gh-121797.)

công cụ chức năng

  • Thêm trọng điểm Placeholder. Điều này có thể được sử dụng với các hàm partial() hoặc partialmethod() để dành chỗ cho các đối số vị trí trong partial object được trả về. (Được đóng góp bởi Dominykas Grigonis trong gh-119127.)

  • Cho phép truyền tham số initial của reduce() làm đối số từ khóa. (Được đóng góp bởi Sayandip Dutta trong gh-125916.)

nhận được

  • Thêm hỗ trợ cho các tùy chọn với các đối số tùy chọn. (Được đóng góp bởi Serhiy Storchaka trong gh-126374.)

  • Thêm hỗ trợ để trả về các tùy chọn trộn lẫn và các đối số không phải tùy chọn theo thứ tự. (Được đóng góp bởi Serhiy Storchaka trong gh-126390.)

vượt qua

  • Hỗ trợ phản hồi bàn phím trong hàm getpass() thông qua đối số tùy chọn chỉ từ khóa echo_char. Các ký tự giữ chỗ được hiển thị bất cứ khi nào một ký tự được nhập và bị xóa khi ký tự đó bị xóa. (Được đóng góp bởi Semyon Moroz trong gh-77065.)

đồ họa

đống q

hmac

  • Thêm phương thức triển khai tích hợp sẵn cho HMAC (RFC 2104) bằng mã được xác minh chính thức từ dự án HACL*. Việc triển khai này được sử dụng làm phương án dự phòng khi không có triển khai OpenSSL của HMAC. (Được đóng góp bởi Bénédikt Trần trong gh-99108.)

http

  • Danh sách thư mục và các trang lỗi do mô-đun http.server tạo ra cho phép trình duyệt áp dụng chế độ tối mặc định của nó. (Được đóng góp bởi Yorik Hansen trong gh-123430.)

  • Mô-đun http.server hiện hỗ trợ phân phát trên HTTPS bằng cách sử dụng lớp http.server.HTTPSServer. Chức năng này được hiển thị bởi giao diện dòng lệnh (python -m http.server) thông qua các tùy chọn sau:

    (Được đóng góp bởi Semyon Moroz trong gh-85162.)

imaplib

  • Thêm IMAP4.idle(), thực hiện lệnh IMAP4 IDLE như được xác định trong RFC 2177. (Được đóng góp bởi Forest trong gh-55454.)

kiểm tra

  • signature() lấy một đối số mới annotation_format để kiểm soát annotationlib.Format được sử dụng để biểu diễn các chú thích. (Được đóng góp bởi Jelle Zijlstra trong gh-101552.)

  • Signature.format() có một đối số mới unquote_annotations. Nếu đúng, chuỗi annotations được hiển thị mà không có dấu ngoặc kép xung quanh. (Được đóng góp bởi Jelle Zijlstra trong gh-101552.)

  • Thêm hàm ispackage() để xác định đối tượng có phải là package hay không. (Được đóng góp bởi Zhikang Yan trong gh-125634.)

io

  • Đọc văn bản từ luồng không chặn bằng read giờ đây có thể tăng BlockingIOError nếu thao tác không thể trả về byte ngay lập tức. (Được đóng góp bởi Giovanni Siragusa trong gh-109523.)

  • Thêm các giao thức ReaderWriter làm các lựa chọn thay thế đơn giản hơn cho các giao thức giả typing.IO, typing.TextIOtyping.BinaryIO. (Được đóng góp bởi Sebastian Rittau trong gh-127648.)

json

  • Thêm ghi chú ngoại lệ cho lỗi tuần tự hóa JSON cho phép xác định nguồn gốc của lỗi. (Được đóng góp bởi Serhiy Storchaka trong gh-122163.)

  • Cho phép sử dụng mô-đun json làm tập lệnh bằng cách sử dụng khóa chuyển -m: python -m json. Điều này hiện được ưu tiên hơn python -m json.tool, tức là soft deprecated. Xem tài liệu JSON command-line interface. (Được đóng góp bởi Trey Hunner trong gh-122873.)

  • Theo mặc định, đầu ra của JSON command-line interface được tô sáng màu. Điều này có thể được kiểm soát bởi environment variables. (Được đóng góp bởi Tomas Roun trong gh-131952.)

bộ đệm dòng

  • getline() hiện có thể truy xuất mã nguồn cho các mô-đun bị đóng băng. (Được đóng góp bởi Tian Gao trong gh-131638.)

ghi nhật ký.handlers

môn toán

  • Đã thêm thông báo lỗi chi tiết hơn về lỗi tên miền trong mô-đun. (Được đóng góp bởi Charlie Zhao và Sergey B Kirpichev trong gh-101410.)

kiểu bắt chước

  • Thêm command-line công khai cho mô-đun, được gọi thông qua python -m mimetypes. (Được đóng góp bởi Oleg Iarygin và Hugo van Kemenade trong gh-93096.)

  • Thêm một số loại MIME mới dựa trên RFC và cách sử dụng phổ biến:

    Microsoft và RFC 8081 MIME các loại cho font chữ

    • Loại mở được nhúng: application/vnd.ms-fontobject

    • Bố cục OpenType (OTF) font/otf

    • Loại thật: font/ttf

    • WOFF 1.0 font/woff

    • WOFF 2.0 font/woff2

    RFC 9559 MIME các loại cho cấu trúc chứa dữ liệu nghe nhìn Matroska

    • âm thanh không có video: audio/matroska (.mka)

    • video: video/matroska (.mkv)

    • video lập thể: video/matroska-3d (.mk3d)

    Hình ảnh có RFC

    • RFC 1494: CCITT Nhóm 3 (.g3)

    • RFC 3362: Fax thời gian thực, T.38 (.t38)

    • RFC 3745: JPEG 2000 (.jp2), phần mở rộng (.jpx) và hợp chất (.jpm)

    • RFC 3950: Định dạng tệp hình ảnh thẻ Fax eXtends, TIFF-FX (.tfx)

    • RFC 4047: Hệ thống truyền hình ảnh linh hoạt (.fits)

    • RFC 7903: Siêu tệp nâng cao (.emf) và Siêu tệp Windows (.wmf)

    Các bổ sung và thay đổi loại MIME khác

    • RFC 2361: Thay đổi loại cho .avi thành video/vnd.avi và cho .wav thành audio/vnd.wave

    • RFC 4337: Thêm MPEG-4 audio/mp4 (.m4a)

    • RFC 5334: Thêm phương tiện Ogg (.oga, .ogg.ogx)

    • RFC 6713: Thêm gzip application/gzip (.gz)

    • RFC 9639: Thêm FLAC audio/flac (.flac)

    • RFC 9512 application/yaml MIME loại cho các tập tin YAML (.yaml.yml)

    • Thêm 7z application/x-7z-compressed (.7z)

    • Thêm gói Android application/vnd.android.package-archive (.apk) khi không nghiêm ngặt

    • Thêm deb application/x-debian-package (.deb)

    • Thêm glTF nhị phân model/gltf-binary (.glb)

    • Thêm glTF JSON/ASCII model/gltf+json (.gltf)

    • Thêm M4V video/x-m4v (.m4v)

    • Thêm PHP application/x-httpd-php (.php)

    • Thêm RAR application/vnd.rar (.rar)

    • Thêm RPM application/x-rpm (.rpm)

    • Thêm STL model/stl (.stl)

    • Thêm Windows Media Video video/x-ms-wmv (.wmv)

    • Trên thực tế: Thêm WebM audio/webm (.weba)

    • ECMA-376: Thêm loại .docx, .pptx.xlsx

    • OASIS: Thêm các loại OpenDocument .odg, .odp, .ods.odt

    • W3C: Thêm EPUB application/epub+zip (.epub)

    (Được đóng góp bởi Sahil Prajapati và Hugo van Kemenade trong gh-84852, bởi Sasha "Nelie" Chernykh và Hugo van Kemenade trong gh-132056, và bởi Hugo van Kemenade trong gh-89416, gh-85957gh-129965.)

đa xử lý

  • Trên các nền tảng Unix khác ngoài macOS, 'forkserver' hiện là start method mặc định (thay thế 'fork'). Thay đổi này không ảnh hưởng đến Windows hoặc macOS, trong đó 'spawn' vẫn là phương thức khởi động mặc định.

    Nếu bắt buộc phải có phương thức fork không tương thích luồng, bạn phải yêu cầu nó một cách rõ ràng thông qua ngữ cảnh từ get_context() (ưu tiên) hoặc thay đổi mặc định qua set_start_method().

    Xem forkserver restrictions để biết thông tin và sự khác biệt với phương pháp fork cũng như cách thay đổi này có thể ảnh hưởng đến mã hiện có với các biến chung có thể thay đổi và/hoặc đối tượng chia sẻ không thể tự động là pickled.

    (Được đóng góp bởi Gregory P. Smith trong gh-84559.)

  • Phương thức khởi động 'forkserver' của multiprocessing hiện xác thực ổ cắm điều khiển của nó để tránh chỉ dựa vào các quyền của hệ thống tệp để hạn chế những quy trình khác có thể khiến máy chủ phân nhánh sinh ra các nhân viên và chạy mã. (Được đóng góp bởi Gregory P. Smith cho gh-97514.)

  • Các loại multiprocessing proxy objects dành cho listdict có được các phương thức bị thiếu trước đây bị bỏ qua:

    • clear()copy() cho proxy của list

    • fromkeys(), reversed(d), d | {}, {} | d, d |= {'b': 2} cho proxy của dict

    (Được đóng góp bởi Roy Hyunjin Han cho gh-103134.)

  • Thêm hỗ trợ cho các đối tượng set được chia sẻ qua SyncManager.set(). Phương thức set() trong Manager() hiện đã có sẵn. (Được đóng góp bởi Mingyu Park trong gh-129949.)

  • Thêm interrupt() vào các đối tượng multiprocessing.Process, việc này sẽ kết thúc tiến trình con bằng cách gửi SIGINT. Điều này cho phép các mệnh đề finally in dấu vết ngăn xếp cho quá trình đã kết thúc. (Được đóng góp bởi Artem Pulkin trong gh-131913.)

toán tử

  • Thêm is_none()is_not_none() làm một cặp hàm, sao cho operator.is_none(obj) tương đương với obj is Noneoperator.is_not_none(obj) tương đương với obj is not None. (Được đóng góp bởi Raymond Hettinger và Nico Mexis trong gh-115808.)

hệ điều hành

os.path

  • Tham số strict cho realpath() chấp nhận một giá trị mới, ALLOW_MISSING. Nếu được sử dụng, các lỗi khác ngoài FileNotFoundError sẽ xuất hiện lại; đường dẫn kết quả có thể bị thiếu nhưng nó sẽ không có liên kết tượng trưng. (Được đóng góp bởi Petr Viktorin cho CVE 2025-4517.)

đường dẫn

  • Thêm phương thức vào pathlib.Path để sao chép hoặc di chuyển đệ quy các tệp và thư mục:

    • copy() sao chép cây tập tin hoặc thư mục tới đích.

    • copy_into() sao chép into vào thư mục đích.

    • move() di chuyển cây tập tin hoặc thư mục đến đích.

    • move_into() di chuyển into vào thư mục đích.

    (Được đóng góp bởi Barney Gale trong gh-73991.)

  • Thêm thuộc tính info, lưu trữ một đối tượng triển khai giao thức pathlib.types.PathInfo mới. Đối tượng hỗ trợ truy vấn loại tệp và lưu trữ nội bộ các kết quả stat(). Các đối tượng đường dẫn do iterdir() tạo ra được khởi tạo với thông tin loại tệp được thu thập từ quá trình quét thư mục mẹ. (Được đóng góp bởi Barney Gale trong gh-125413.)

pdb

  • Mô-đun pdb hiện hỗ trợ gắn từ xa vào quy trình Python đang chạy bằng tùy chọn dòng lệnh -p PID mới:

    trăn -m pdb -p 1234
    

    Điều này sẽ kết nối với quy trình Python với PID đã cho và cho phép bạn gỡ lỗi nó một cách tương tác. Lưu ý rằng do cách trình thông dịch Python hoạt động, việc gắn vào một quy trình từ xa bị chặn trong cuộc gọi hệ thống hoặc chờ I/O sẽ chỉ hoạt động khi lệnh mã byte tiếp theo được thực thi hoặc khi quy trình nhận được tín hiệu.

    Tính năng này sử dụng PEP 768 và chức năng sys.remote_exec() mới để gắn vào quy trình từ xa và gửi lệnh PDB tới nó.

    (Được đóng góp bởi Matt Wozniski và Pablo Galindo trong gh-131591.)

  • Các điểm dừng được mã hóa cứng (breakpoint()set_trace()) hiện sử dụng lại phiên bản Pdb gần đây nhất gọi set_trace(), thay vì mỗi lần tạo một phiên bản mới. Do đó, tất cả dữ liệu cụ thể của phiên bản như displaycommands đều được giữ nguyên trên các điểm dừng được mã hóa cứng. (Được đóng góp bởi Tian Gao trong gh-121450.)

  • Thêm một đối số mới mode vào pdb.Pdb. Tắt lệnh restart khi pdb ở chế độ inline. (Được đóng góp bởi Tian Gao trong gh-123757.)

  • Lời nhắc xác nhận sẽ được hiển thị khi người dùng cố gắng thoát pdb ở chế độ inline. y, Y, <Enter> hoặc EOF sẽ xác nhận thoát và gọi sys.exit(), thay vì tăng bdb.BdbQuit. (Được đóng góp bởi Tian Gao trong gh-124704.)

  • Các điểm ngắt nội tuyến như breakpoint() hoặc pdb.set_trace() sẽ luôn dừng chương trình ở khung đang gọi, bỏ qua mẫu skip (nếu có). (Được đóng góp bởi Tian Gao trong gh-130493.)

  • <tab> ở đầu dòng trong kiểu nhập nhiều dòng pdb sẽ điền vào thụt lề 4 dấu cách, thay vì chèn ký tự \t. (Được đóng góp bởi Tian Gao trong gh-130471.)

  • Tự động thụt lề được giới thiệu trong đầu vào nhiều dòng pdb. Nó sẽ giữ nguyên mức thụt dòng của dòng cuối cùng hoặc chèn thụt lề 4 dấu cách khi phát hiện khối mã mới. (Được đóng góp bởi Tian Gao trong gh-133350.)

  • $_asynctask được thêm vào để truy cập tác vụ asyncio hiện tại nếu có. (Được đóng góp bởi Tian Gao trong gh-124367.)

  • pdb.set_trace_async() được thêm vào để hỗ trợ gỡ lỗi coroutine asyncio. Câu lệnh await được hỗ trợ với chức năng này. (Được đóng góp bởi Tian Gao trong gh-132576.)

  • Mã nguồn hiển thị trong pdb sẽ được đánh dấu theo cú pháp. Tính năng này có thể được kiểm soát bằng các phương thức tương tự như shell interactive mặc định, ngoài đối số colorize mới được thêm vào của pdb.Pdb. (Được đóng góp bởi Tian Gao và Łukasz Langa trong gh-133355.)

dưa chua

  • Đặt phiên bản giao thức mặc định trên mô-đun pickle thành 5. Để biết thêm chi tiết, hãy xem pickle protocols.

  • Thêm ghi chú ngoại lệ cho các lỗi tuần tự hóa dưa chua cho phép xác định nguồn gốc của lỗi. (Được đóng góp bởi Serhiy Storchaka trong gh-122213.)

nền tảng

  • Thêm invalidate_caches(), một chức năng vô hiệu hóa các kết quả được lưu trong bộ nhớ đệm trong mô-đun platform. (Được đóng góp bởi Bénédikt Trần trong gh-122549.)

pydoc

  • Annotations trong đầu ra trợ giúp hiện thường được hiển thị ở định dạng gần giống với định dạng trong nguồn ban đầu. (Được đóng góp bởi Jelle Zijlstra trong gh-101552.)

lại

  • Hỗ trợ \z làm từ đồng nghĩa với \Z trong regular expressions. Nó được diễn giải một cách rõ ràng trong nhiều công cụ biểu thức chính quy khác, không giống như \Z, có hành vi khác biệt một chút. (Được đóng góp bởi Serhiy Storchaka trong gh-133306.)

  • \B trong regular expression hiện khớp với chuỗi đầu vào trống, nghĩa là bây giờ nó luôn đối lập với \b. (Được đóng góp bởi Serhiy Storchaka trong gh-124130.)

ổ cắm

  • Cải thiện và sửa lỗi hỗ trợ cho ổ cắm Bluetooth.

    • Sửa lỗi hỗ trợ ổ cắm Bluetooth trên NetBSD và DragonFly BSD. (Được đóng góp bởi Serhiy Storchaka trong gh-132429.)

    • Khắc phục sự cố hỗ trợ cho BTPROTO_HCI trên FreeBSD. (Được đóng góp bởi Victor Stinner trong gh-111178.)

    • Thêm hỗ trợ cho BTPROTO_SCO trên FreeBSD. (Được đóng góp bởi Serhiy Storchaka trong gh-85302.)

    • Thêm hỗ trợ cho cidbdaddr_type trong địa chỉ dành cho BTPROTO_L2CAP trên FreeBSD. (Được đóng góp bởi Serhiy Storchaka trong gh-132429.)

    • Thêm hỗ trợ cho channel trong địa chỉ dành cho BTPROTO_HCI trên Linux. (Được đóng góp bởi Serhiy Storchaka trong gh-70145.)

    • Chấp nhận một số nguyên làm địa chỉ cho BTPROTO_HCI trên Linux. (Được đóng góp bởi Serhiy Storchaka trong gh-132099.)

    • Trả về cid trong getsockname() cho BTPROTO_L2CAP. (Được đóng góp bởi Serhiy Storchaka trong gh-132429.)

    • Thêm nhiều hằng số mới. (Được đóng góp bởi Serhiy Storchaka trong gh-132734.)

ssl

  • Cho biết thông qua HAS_PHA Boolean xem mô-đun ssl có hỗ trợ xác thực ứng dụng khách sau bắt tay TLSv1.3 (PHA) hay không. (Được đóng góp bởi Will Childs-Klein trong gh-128036.)

cấu trúc

  • Hỗ trợ các loại float complexdouble complex C trong mô-đun struct (định dạng các ký tự 'F''D' tương ứng). (Được đóng góp bởi Sergey B Kirpichev trong gh-121249.)

biểu tượng

hệ thống

  • Hàm đặc biệt sys.getobjects() không có giấy tờ trước đây, chỉ tồn tại trong các bản dựng chuyên biệt của Python, giờ đây có thể trả về các đối tượng từ các trình thông dịch khác ngoài trình thông dịch được gọi. (Được đóng góp bởi Eric Snow trong gh-125286.)

  • Thêm sys._is_immortal() để xác định xem một đối tượng có phải là immortal hay không. (Được đóng góp bởi Peter Bierma trong gh-128509.)

  • Trên FreeBSD, sys.platform không còn chứa số phiên bản chính nữa. Nó luôn là 'freebsd', thay vì 'freebsd13' hoặc 'freebsd14'. (Được đóng góp bởi Michael Osipov trong gh-129393.)

  • Tăng DeprecationWarning cho sys._clear_type_cache(). Hàm này không được dùng nữa trong Python 3.13 nhưng nó không đưa ra cảnh báo thời gian chạy.

  • Thêm sys.remote_exec() để triển khai giao diện trình gỡ lỗi bên ngoài mới. Xem PEP 768 để biết chi tiết. (Được đóng góp bởi Pablo Galindo Salgado, Matt Wozniski và Ivona Stojanovic trong gh-131591.)

  • Thêm không gian tên sys._jit, chứa các tiện ích để xem xét quá trình biên dịch đúng lúc. (Được đóng góp bởi Brandt Bucher trong gh-133231.)

sys.monitoring

  • Thêm hai sự kiện giám sát mới, BRANCH_LEFTBRANCH_RIGHT. Chúng thay thế và loại bỏ sự kiện BRANCH. (Được đóng góp bởi Mark Shannon trong gh-122548.)

cấu hình hệ thống

hồ dầu

  • data_filter() hiện bình thường hóa các mục tiêu liên kết tượng trưng để tránh các cuộc tấn công truyền tải đường dẫn. (Được đóng góp bởi Petr Viktorin trong gh-127987CVE 2025-4138.)

  • extractall() hiện bỏ qua việc sửa các thuộc tính thư mục khi thư mục bị xóa hoặc thay thế bằng một loại tệp khác. (Được đóng góp bởi Petr Viktorin trong gh-127987CVE 2024-12718.)

  • extract()extractall() hiện áp dụng (lại) bộ lọc trích xuất khi thay thế một liên kết (cứng hoặc tượng trưng) bằng bản sao của một thành viên lưu trữ khác và khi sửa các thuộc tính thư mục. Cái trước đưa ra một ngoại lệ mới, LinkFallbackError. (Được đóng góp bởi Petr Viktorin cho CVE 2025-4330CVE 2024-12718.)

  • extract()extractall() không còn trích xuất các thành viên bị từ chối khi errorlevel() bằng 0. (Được đóng góp bởi Matt Prodani và Petr Viktorin trong gh-112887CVE 2025-4435.)

luồng

tkinter

  • Tạo các phương thức tiện ích tkinter after()after_idle() chấp nhận đối số từ khóa. (Được đóng góp bởi Zhikang Yan trong gh-126899.)

  • Thêm khả năng chỉ định tên cho tkinter.OptionMenutkinter.ttk.OptionMenu. (Được đóng góp bởi Zhikang Yan trong gh-130482.)

rùa

các loại

đánh máy

  • Các loại types.UnionTypetyping.Union hiện là bí danh của nhau, nghĩa là cả các liên kết kiểu cũ (được tạo bằng Union[int, str]) và các liên kết kiểu mới (int | str) hiện tạo các phiên bản của cùng một loại thời gian chạy. Điều này thống nhất hành vi giữa hai cú pháp, nhưng dẫn đến một số khác biệt trong hành vi có thể ảnh hưởng đến những người dùng xem xét nội tâm các loại trong thời gian chạy:

    • Cả hai cú pháp để tạo liên kết hiện đều tạo ra cùng một biểu diễn chuỗi trong repr(). Ví dụ: repr(Union[int, str]) bây giờ là "int | str" thay vì "typing.Union[int, str]".

    • Các liên kết được tạo bằng cú pháp cũ không còn được lưu vào bộ đệm. Trước đây, chạy Union[int, str] nhiều lần sẽ trả về cùng một đối tượng (Union[int, str] is Union[int, str] sẽ là True), nhưng bây giờ nó sẽ trả về hai đối tượng khác nhau. Sử dụng == để so sánh các công đoàn về sự bình đẳng, không phải is. Các liên kết kiểu mới chưa bao giờ được lưu vào bộ nhớ đệm theo cách này. Thay đổi này có thể tăng mức sử dụng bộ nhớ cho một số chương trình sử dụng số lượng lớn các liên kết được tạo bằng cách đăng ký typing.Union. Tuy nhiên, một số yếu tố bù đắp chi phí này: các liên kết được sử dụng trong chú thích không còn được đánh giá theo mặc định trong Python 3.14 vì PEP 649; một phiên bản của types.UnionType nhỏ hơn nhiều so với đối tượng được trả về bởi Union[] trên các phiên bản Python trước đó; và loại bỏ bộ đệm cũng tiết kiệm một số dung lượng. Do đó, khó có khả năng thay đổi này sẽ làm tăng đáng kể mức sử dụng bộ nhớ đối với hầu hết người dùng.

    • Trước đây, các liên kết kiểu cũ được triển khai bằng lớp riêng typing._UnionGenericAlias. Lớp này không còn cần thiết cho việc triển khai nhưng nó đã được giữ lại để tương thích ngược, với kế hoạch loại bỏ đối với Python 3.17. Người dùng nên sử dụng các công cụ trợ giúp xem xét nội tâm được ghi lại như get_origin()typing.get_args() thay vì dựa vào các chi tiết triển khai riêng tư.

    • Hiện tại có thể sử dụng chính typing.Union trong quá trình kiểm tra isinstance(). Ví dụ: isinstance(int | str, typing.Union) sẽ trả về True; trước đây điều này đã gây ra TypeError.

    • Thuộc tính __args__ của đối tượng typing.Union không thể ghi được nữa.

    • Không thể đặt bất kỳ thuộc tính nào trên đối tượng Union nữa. Điều này chỉ từng hoạt động đối với các thuộc tính ngu ngốc trên các phiên bản trước, chưa bao giờ được ghi nhận là hoạt động và bị hỏng một cách tinh tế trong nhiều trường hợp.

    (Được đóng góp bởi Jelle Zijlstra trong gh-105499.)

  • TypeAliasType hiện hỗ trợ giải nén sao.

dữ liệu unicode

  • Cơ sở dữ liệu Unicode đã được cập nhật lên Unicode 16.0.0.

nhỏ nhất

urllib

  • Nâng cấp thuật toán xác thực thông báo HTTP cho urllib.request bằng cách hỗ trợ xác thực thông báo SHA-256 như được chỉ định trong RFC 7616. (Được đóng góp bởi Calvin Bùi trong gh-128193.)

  • Cải thiện sự tuân thủ các tiêu chuẩn và công thái học khi phân tích cú pháp và phát ra các URL file:.

    Trong url2pathname():

    • Chấp nhận URL hoàn chỉnh khi đối số require_scheme mới được đặt thành true.

    • Loại bỏ quyền URL nếu nó khớp với tên máy chủ cục bộ.

    • Loại bỏ quyền URL nếu nó phân giải thành địa chỉ IP cục bộ khi đối số resolve_host mới được đặt thành true.

    • Loại bỏ các thành phần truy vấn và phân đoạn URL.

    • Tăng URLError nếu cơ quan URL không phải là cục bộ, ngoại trừ trên Windows nơi chúng tôi trả về đường dẫn UNC như trước.

    Trong pathname2url():

    • Trả về một URL hoàn chỉnh khi đối số add_scheme mới được đặt thành true.

    • Bao gồm quyền hạn URL trống khi đường dẫn bắt đầu bằng dấu gạch chéo. Ví dụ: đường dẫn /etc/hosts được chuyển đổi thành URL ///etc/hosts.

    Trên Windows, các ký tự ổ đĩa không còn được chuyển đổi thành chữ hoa và các ký tự : không theo sau ký tự ổ đĩa không còn gây ra ngoại lệ OSError nữa.

    (Được đóng góp bởi Barney Gale trong gh-125866.)

uuid

  • Thêm hỗ trợ cho UUID phiên bản 6, 7 và 8 thông qua uuid6(), uuid7()uuid8() tương ứng, như được chỉ định trong RFC 9562. (Được đóng góp bởi Bénédikt Trần trong gh-89083.)

  • NILMAX hiện có sẵn để thể hiện các định dạng Nil và Max UUID như được xác định bởi RFC 9562. (Được đóng góp bởi Nick Pope trong gh-128427.)

  • Cho phép tạo nhiều UUID cùng lúc trên dòng lệnh thông qua python -m uuid --count. (Được đóng góp bởi Simon Legner trong gh-131236.)

trình duyệt web

  • Tên trong biến môi trường BROWSER hiện có thể đề cập đến các trình duyệt đã được đăng ký cho mô-đun webbrowser, thay vì luôn tạo lệnh trình duyệt mới.

    Điều này giúp có thể đặt BROWSER thành giá trị của một trong các trình duyệt được hỗ trợ trên macOS.

tập tin zip

  • Đã thêm ZipInfo._for_archive, một phương pháp để giải quyết các giá trị mặc định phù hợp cho đối tượng ZipInfo được ZipFile.writestr sử dụng. (Được đóng góp bởi Bénédikt Trần trong gh-123424.)

  • ZipFile.writestr() hiện tôn trọng biến môi trường SOURCE_DATE_EPOCH để hỗ trợ tốt hơn cho các bản dựng có thể tái tạo. (Được đóng góp bởi Jiahao Li trong gh-91279.)

Tối ưu hóa

asyncio

  • Kết quả điểm chuẩn tiêu chuẩn đã được cải thiện từ 10-20% sau khi triển khai danh sách liên kết đôi trên mỗi luồng mới cho native tasks, đồng thời giảm mức sử dụng bộ nhớ. Điều này cho phép các công cụ xem xét bên ngoài như python -m asyncio pstree xem xét biểu đồ cuộc gọi của các tác vụ asyncio đang chạy trong tất cả các luồng. (Được đóng góp bởi Kumar Aditya trong gh-107803.)

  • Mô-đun hiện có hỗ trợ hạng nhất cho free-threading builds. Điều này cho phép thực thi song song nhiều vòng lặp sự kiện trên các luồng khác nhau, chia tỷ lệ tuyến tính theo số lượng luồng. (Được đóng góp bởi Kumar Aditya trong gh-128002.)

cơ sở64

  • b16decode() hiện nhanh hơn tới sáu lần. (Được đóng góp bởi Bénédikt Tran, Chris Markiewicz và Adam Turner trong gh-118761.)

bdb

  • Trình gỡ lỗi cơ bản hiện có phần phụ trợ dựa trên sys.monitoring, có thể được chọn thông qua việc chuyển 'monitoring' tới tham số backend mới của lớp Bdb. (Được đóng góp bởi Tian Gao trong gh-124533.)

khuếch tán

  • Chức năng IS_LINE_JUNK() giờ đây nhanh gấp đôi. (Được đóng góp bởi Adam Turner và Semyon Moroz trong gh-130167.)

gc

  • Zz000zz mới có nghĩa là thời gian tạm dừng tối đa được giảm đi một bậc hoặc nhiều hơn đối với các vùng dữ liệu lớn hơn.

    Do sự tối ưu hóa này, ý nghĩa của kết quả của get_threshold()set_threshold(), cùng với get_count()get_stats() đã thay đổi.

    • Để tương thích ngược, get_threshold() tiếp tục trả về bộ ba mục. Giá trị đầu tiên là ngưỡng cho các bộ sưu tập trẻ, như trước đây; giá trị thứ hai xác định tốc độ quét bộ sưu tập cũ (mặc định là 10 và giá trị cao hơn có nghĩa là bộ sưu tập cũ được quét chậm hơn). Giá trị thứ ba bây giờ là vô nghĩa và luôn bằng 0.

    • set_threshold() hiện bỏ qua mọi mục sau mục thứ hai.

    • get_count()get_stats() tiếp tục trả về cùng một định dạng kết quả. Điểm khác biệt duy nhất là thay vì kết quả đề cập đến thế hệ trẻ, già và già, kết quả lại đề cập đến thế hệ trẻ và không gian già hóa, thu thập của thế hệ cũ.

    Tóm lại, mã cố gắng thao túng hành vi của chu trình GC có thể không hoạt động chính xác như dự kiến nhưng rất khó có khả năng gây hại. Tất cả các mã khác sẽ hoạt động tốt.

    (Được đóng góp bởi Mark Shannon trong gh-108362.)

io

  • Giờ đây, việc mở và đọc tệp thực hiện ít lệnh gọi hệ thống hơn. Đọc toàn bộ tệp được lưu trong bộ nhớ đệm của hệ điều hành nhỏ nhanh hơn tới 15%. (Được đóng góp bởi Cody Maloney và Victor Stinner trong gh-120754gh-90102.)

đường dẫn

  • Path.read_bytes hiện sử dụng chế độ không có bộ đệm để mở tệp, tốc độ đọc toàn bộ nhanh hơn từ 9% đến 17%. (Được đóng góp bởi Cody Maloney trong gh-120754.)

pdb

  • pdb hiện hỗ trợ hai phần phụ trợ, dựa trên sys.settrace() hoặc sys.monitoring. Việc sử dụng pdb CLI hoặc breakpoint() sẽ luôn sử dụng phần phụ trợ sys.monitoring. Việc khởi tạo rõ ràng pdb.Pdb và các lớp dẫn xuất của nó sẽ sử dụng phần phụ trợ sys.settrace() theo mặc định, có thể định cấu hình được. (Được đóng góp bởi Tian Gao trong gh-124533.)

bọc văn bản

  • Tối ưu hóa chức năng dedent(), cải thiện hiệu suất trung bình 2,4 lần, với những cải tiến lớn hơn cho đầu vào lớn hơn và sửa lỗi chuẩn hóa không đầy đủ các dòng trống với các ký tự khoảng trắng ngoài dấu cách và tab.

uuid

  • uuid3()uuid5() hiện nhanh hơn khoảng 40% đối với tên 16 byte và nhanh hơn 20% đối với tên 1024 byte. Hiệu suất của những tên dài hơn vẫn không thay đổi. (Được đóng góp bởi Bénédikt Trần trong gh-128150.)

  • uuid4() bây giờ là c. Nhanh hơn 30%. (Được đóng góp bởi Bénédikt Trần trong gh-128150.)

zlib

  • Trên Windows, zlib-ng hiện được sử dụng làm triển khai mô-đun zlib trong các tệp nhị phân mặc định. Không có sự không tương thích nào được biết đến giữa zlib-ng và cách triển khai zlib được sử dụng trước đó. Điều này sẽ mang lại hiệu suất tốt hơn ở mọi mức độ nén.

    Điều đáng chú ý là zlib.Z_BEST_SPEED (1) có thể dẫn đến việc nén ít hơn đáng kể so với cách triển khai trước đó, đồng thời cũng giảm đáng kể thời gian nén.

    (Được đóng góp bởi Steve Dower trong gh-91349.)

Đã xóa

phân tích cú pháp

  • Loại bỏ các tham số type, choicesmetavar của BooleanOptionalAction. Những thứ này đã không được dùng nữa kể từ Python 3.12. (Được đóng góp bởi Nikita Sobolev trong gh-118805.)

  • Việc gọi add_argument_group() trên một nhóm đối số giờ đây sẽ tạo ra ValueError. Tương tự, add_argument_group() hoặc add_mutually_exclusive_group() trên một nhóm loại trừ lẫn nhau giờ đây đều tăng ValueErrors. Việc 'lồng nhau' này không bao giờ được hỗ trợ, thường không hoạt động chính xác và vô tình bị lộ thông qua tính kế thừa. Chức năng này không được dùng nữa kể từ Python 3.11. (Được đóng góp bởi Savannah Ostrowski trong gh-127186.)

ast

  • Xóa các lớp sau, các bí danh không được dùng nữa là Constant kể từ Python 3.8 và đã đưa ra cảnh báo không dùng nữa kể từ Python 3.12:

    • Bytes

    • Ellipsis

    • NameConstant

    • Num

    • Str

    Do hậu quả của việc xóa này, các phương thức visit_Num, visit_Str, visit_Bytes, visit_NameConstantvisit_Ellipsis do người dùng xác định trên các lớp con NodeVisitor tùy chỉnh sẽ không còn được gọi khi lớp con NodeVisitor đang truy cập AST. Thay vào đó, hãy xác định phương thức visit_Constant.

    (Được đóng góp bởi Alex Waygood trong gh-119562.)

  • Xóa các thuộc tính không được dùng nữa trên ast.Constant, hiện có để tương thích với các lớp AST hiện đã bị xóa:

    • Constant.n

    • Constant.s

    Thay vào đó hãy sử dụng Constant.value. (Được đóng góp bởi Alex Waygood trong gh-119562.)

asyncio

  • Xóa các lớp, phương thức và hàm sau không được dùng nữa kể từ Python 3.12:

    • AbstractChildWatcher

    • FastChildWatcher

    • MultiLoopChildWatcher

    • PidfdChildWatcher

    • SafeChildWatcher

    • ThreadedChildWatcher

    • AbstractEventLoopPolicy.get_child_watcher()

    • AbstractEventLoopPolicy.set_child_watcher()

    • get_child_watcher()

    • set_child_watcher()

    (Được đóng góp bởi Kumar Aditya trong gh-120804.)

  • asyncio.get_event_loop() hiện tăng RuntimeError nếu không có vòng lặp sự kiện hiện tại và không còn ngầm tạo vòng lặp sự kiện nữa.

    (Được đóng góp bởi Kumar Aditya trong gh-126353.)

    Có một số mẫu sử dụng asyncio.get_event_loop(), hầu hết chúng có thể được thay thế bằng asyncio.run().

    Nếu bạn đang chạy chức năng không đồng bộ, chỉ cần sử dụng asyncio.run().

    Trước:

    async def main():
        ...
    
    
    vòng lặp = asyncio.get_event_loop()
    thử:
        loop.run_until_complete(main())
    cuối cùng:
        loop.close()
    

    Sau:

    async def main():
        ...
    
    asyncio.run(chính())
    

    Nếu bạn cần khởi động một cái gì đó, chẳng hạn như một máy chủ đang lắng nghe trên ổ cắm và sau đó chạy mãi mãi, hãy sử dụng asyncio.run()asyncio.Event.

    Trước:

    def start_server (vòng lặp): ...
    
    vòng lặp = asyncio.get_event_loop()
    thử:
        start_server(vòng lặp)
        loop.run_forever()
    cuối cùng:
        loop.close()
    

    Sau:

    def start_server (vòng lặp): ...
    
    async def main():
        start_server(asyncio.get_running_loop())
        đang chờ asyncio.Event().wait()
    
    asyncio.run(chính())
    

    Nếu bạn cần chạy thứ gì đó trong vòng lặp sự kiện, hãy chạy một số mã chặn xung quanh nó, hãy sử dụng asyncio.Runner.

    Trước:

    async def hoạt động_one (): ...
    def chặn_code(): ...
    async def hoạt động_two(): ...
    
    vòng lặp = asyncio.get_event_loop()
    thử:
        loop.run_until_complete(Operation_one())
        chặn_code()
        loop.run_until_complete(Operation_two())
    cuối cùng:
        loop.close()
    

    Sau:

    async def hoạt động_one (): ...
    def chặn_code(): ...
    async def hoạt động_two(): ...
    
    với asyncio.Runner() làm người chạy:
        Runner.run(Operation_one())
        chặn_code()
        Runner.run(Operation_two())
    

email

  • Xóa tham số isdst của email.utils.localtime(), tham số này không được dùng nữa và bị bỏ qua kể từ Python 3.12. (Được đóng góp bởi Hugo van Kemenade trong gh-118798.)

importlib.abc

itertools

  • Loại bỏ hỗ trợ cho các hoạt động sao chép, deepcopy và Pickup khỏi các trình vòng lặp itertools. Chúng đã phát ra DeprecationWarning kể từ Python 3.12. (Được đóng góp bởi Raymond Hettinger trong gh-101588.)

đường dẫn

  • Xóa hỗ trợ chuyển đối số từ khóa bổ sung tới Path. Trong các phiên bản trước, mọi đối số như vậy đều bị bỏ qua. (Được đóng góp bởi Barney Gale trong gh-74033.)

  • Xóa hỗ trợ chuyển các đối số vị trí bổ sung cho PurePath.relative_to()is_relative_to(). Trong các phiên bản trước, mọi đối số như vậy đều được nối vào other. (Được đóng góp bởi Barney Gale trong gh-78707.)

pkgutil

  • Xóa các hàm get_loader()find_loader() không được dùng nữa kể từ Python 3.12. (Được đóng góp bởi Bénédikt Trần trong gh-97850.)

pty

  • Xóa các hàm master_open()slave_open() không được dùng nữa kể từ Python 3.12. Thay vào đó hãy sử dụng pty.openpty(). (Được đóng góp bởi Nikita Sobolev trong gh-118824.)

sqlite3

  • Xóa versionversion_info khỏi mô-đun sqlite3; sử dụng sqlite_versionsqlite_version_info cho số phiên bản thực tế của thư viện SQLite thời gian chạy. (Được đóng góp bởi Hugo van Kemenade trong gh-118924.)

  • Việc sử dụng một chuỗi các tham số với phần giữ chỗ được đặt tên hiện sẽ tăng ProgrammingError, không được dùng nữa kể từ Python 3.12. (Được đóng góp bởi Erlend E. Aasland trong gh-118928gh-101693.)

urllib

  • Xóa lớp Quoter khỏi urllib.parse, lớp này không được dùng nữa kể từ Python 3.11. (Được đóng góp bởi Nikita Sobolev trong gh-118827.)

  • Xóa các lớp URLopenerFancyURLopener khỏi urllib.request, lớp này không được dùng nữa kể từ Python 3.3.

    myopener.open() có thể được thay thế bằng urlopen(). myopener.retrieve() có thể được thay thế bằng urlretrieve(). Các tùy chỉnh đối với các lớp mở có thể được thay thế bằng cách chuyển các trình xử lý tùy chỉnh tới build_opener(). (Được đóng góp bởi Barney Gale trong gh-84850.)

Không được dùng nữa

Ngừng sử dụng mới

  • Việc truyền số phức dưới dạng đối số real hoặc imag trong hàm tạo complex() hiện không được dùng nữa; số phức chỉ nên được chuyển dưới dạng đối số vị trí duy nhất. (Được đóng góp bởi Serhiy Storchaka trong gh-109218.)

  • argparse:

    • Việc chuyển đối số từ khóa không có giấy tờ prefix_chars sang phương thức add_argument_group() hiện không được dùng nữa. (Được đóng góp bởi Savannah Ostrowski trong gh-125563.)

    • Không dùng nữa bộ chuyển đổi loại argparse.FileType. Bất cứ điều gì liên quan đến quản lý tài nguyên phải được xử lý ở phía dưới, sau khi các đối số đã được phân tích cú pháp. (Được đóng góp bởi Serhiy Storchaka trong gh-58032.)

  • asyncio:

  • codecs: Hàm codecs.open() hiện không được dùng nữa và sẽ bị xóa trong phiên bản Python trong tương lai. Thay vào đó hãy sử dụng open(). (Được đóng góp bởi Inada Naoki trong gh-133036.)

  • ctypes:

    • Trên các nền tảng không phải Windows, cài đặt Structure._pack_ để sử dụng bố cục bộ nhớ mặc định tương thích với MSVC hiện không được dùng nữa mà thay vào đó là đặt Structure._layout_ thành 'ms' và sẽ bị xóa trong Python 3.19. (Được đóng góp bởi Petr Viktorin trong gh-131747.)

    • Việc gọi ctypes.POINTER() trên một chuỗi hiện không còn được dùng nữa. Sử dụng incomplete types cho cấu trúc tự tham chiếu. Ngoài ra, ctypes._pointer_type_cache nội bộ không được dùng nữa. Xem ctypes.POINTER() để biết chi tiết triển khai được cập nhật. (Được đóng góp bởi Sergey Myrianov trong gh-100926.)

  • functools: Gọi triển khai functools.reduce() bằng Python bằng function hoặc sequence làm đối số từ khóa hiện không được dùng nữa; các tham số sẽ chỉ được tạo theo vị trí trong Python 3.16. (Được đóng góp bởi Kirill Podoprigora trong gh-121676.)

  • logging: Hỗ trợ trình xử lý ghi nhật ký tùy chỉnh với đối số strm hiện không được dùng nữa và được lên lịch xóa trong Python 3.16. Thay vào đó, hãy xác định trình xử lý bằng đối số stream. (Được đóng góp bởi Mariusz Felisiak trong gh-115032.)

  • mimetypes: Các tiện ích mở rộng hợp lệ trống hoặc phải bắt đầu bằng '.' dành cho mimetypes.MimeTypes.add_type(). Các tiện ích mở rộng không có dấu chấm không được dùng nữa và sẽ tăng ValueError trong Python 3.16. (Được đóng góp bởi Hugo van Kemenade trong gh-75223.)

  • nturl2path: Mô-đun này hiện không được dùng nữa. Thay vào đó hãy gọi urllib.request.url2pathname()pathname2url(). (Được đóng góp bởi Barney Gale trong gh-125866.)

  • os: Các hàm os.popen()os.spawn* hiện là soft deprecated. Chúng không còn được sử dụng để viết mã mới nữa. Thay vào đó, nên sử dụng mô-đun subprocess. (Được đóng góp bởi Victor Stinner trong gh-120743.)

  • pathlib: pathlib.PurePath.as_uri() hiện không được dùng nữa và được lên lịch xóa trong Python 3.19. Thay vào đó hãy sử dụng pathlib.Path.as_uri(). (Được đóng góp bởi Barney Gale trong gh-123599.)

  • pdb: Thuộc tính pdb.Pdb.curframe_locals không có giấy tờ hiện là thuộc tính chỉ đọc không được dùng nữa và sẽ bị xóa trong phiên bản Python trong tương lai. Quyền truy cập cục bộ khung động có chi phí thấp được thêm vào trong Python 3.13 bởi PEP 667 có nghĩa là tham chiếu bộ đệm cục bộ khung được lưu trữ trước đó trong thuộc tính này không còn cần thiết nữa. Trình gỡ lỗi phái sinh sẽ truy cập trực tiếp vào pdb.Pdb.curframe.f_locals trong Python 3.13 và các phiên bản mới hơn. (Được đóng góp bởi Tian Gao trong gh-124369gh-125951.)

  • symtable: Không dùng symtable.Class.get_methods() do không được quan tâm, đã lên lịch xóa trong Python 3.16. (Được đóng góp bởi Bénédikt Trần trong gh-119698.)

  • tkinter: Các phương thức tkinter.Variable trace_variable(), trace_vdelete()trace_vinfo() hiện không được dùng nữa. Thay vào đó hãy sử dụng trace_add(), trace_remove()trace_info(). (Được đóng góp bởi Serhiy Storchaka trong gh-120220.)

  • urllib.parse: Chấp nhận các đối tượng có giá trị sai (như 0[]) ngoại trừ các chuỗi trống, các đối tượng giống byte và None trong parse_qsl()parse_qs() hiện không được dùng nữa. (Được đóng góp bởi Serhiy Storchaka trong gh-116897.)

Đang chờ xóa trong Python 3.15

  • Hệ thống nhập khẩu:

    • Việc đặt __cached__ trên mô-đun trong khi không đặt được __spec__.cached không được dùng nữa. Trong Python 3.15, __cached__ sẽ không còn được hệ thống nhập hoặc thư viện chuẩn xem xét nữa. (gh-97879)

    • Việc đặt __package__ trên mô-đun trong khi không đặt được __spec__.parent không được dùng nữa. Trong Python 3.15, __package__ sẽ không còn được hệ thống nhập hoặc thư viện chuẩn xem xét nữa. (gh-97879)

  • ctypes:

    • Hàm ctypes.SetPointerType() không có giấy tờ đã không được dùng nữa kể từ Python 3.13.

  • http.server:

    • CGIHTTPRequestHandler lỗi thời và hiếm khi được sử dụng đã không được dùng nữa kể từ Python 3.13. Không có sự thay thế trực tiếp tồn tại. Anything tốt hơn CGI trong việc kết nối máy chủ web với trình xử lý yêu cầu.

    • Cờ --cgi cho giao diện dòng lệnh python -m http.server đã không được dùng nữa kể từ Python 3.13.

  • importlib:

    • Phương pháp load_module(): thay vào đó hãy sử dụng exec_module().

  • locale:

    • Hàm getdefaultlocale() đã không được dùng nữa kể từ Python 3.11. Việc loại bỏ nó ban đầu được lên kế hoạch cho Python 3.13 (gh-90817), nhưng đã bị hoãn lại đối với Python 3.15. Thay vào đó hãy sử dụng getlocale(), setlocale()getencoding(). (Được đóng góp bởi Hugo van Kemenade trong gh-111187.)

  • pathlib:

  • platform:

    • java_ver() đã không được dùng nữa kể từ Python 3.13. Chức năng này chỉ hữu ích khi hỗ trợ Jython, có API khó hiểu và phần lớn chưa được kiểm tra.

  • sysconfig:

  • threading:

    • RLock() sẽ không có đối số trong Python 3.15. Việc truyền bất kỳ đối số nào đã không còn được dùng nữa kể từ Python 3.14, vì phiên bản Python không cho phép bất kỳ đối số nào, nhưng phiên bản C cho phép bất kỳ số lượng đối số vị trí hoặc từ khóa nào, bỏ qua mọi đối số.

  • types:

    • types.CodeType: Việc truy cập co_lnotab không còn được dùng nữa trong PEP 626 kể từ phiên bản 3.10 và dự kiến sẽ bị xóa trong phiên bản 3.12, nhưng nó chỉ nhận được một DeprecationWarning thích hợp trong phiên bản 3.12. Có thể được gỡ bỏ trong 3.15. (Được đóng góp bởi Nikita Sobolev trong gh-101866.)

  • typing:

    • Cú pháp đối số từ khóa không có giấy tờ để tạo các lớp NamedTuple (ví dụ: Point = NamedTuple("Point", x=int, y=int)) đã không được dùng nữa kể từ Python 3.13. Thay vào đó hãy sử dụng cú pháp dựa trên lớp hoặc cú pháp chức năng.

    • Khi sử dụng cú pháp chức năng của TypedDicts, việc không truyền giá trị cho tham số fields (TD = TypedDict("TD")) hoặc truyền None (TD = TypedDict("TD", None)) đã không được dùng nữa kể từ Python 3.13. Sử dụng class TD(TypedDict): pass hoặc TD = TypedDict("TD", {}) để tạo TypedDict với trường bằng 0.

    • Chức năng trang trí typing.no_type_check_decorator() đã không được dùng nữa kể từ Python 3.13. Sau tám năm sử dụng mô-đun typing, nó vẫn chưa được hỗ trợ bởi bất kỳ trình kiểm tra loại chính nào.

  • wave:

  • zipimport:

Đang chờ xóa trong Python 3.16

  • Hệ thống nhập khẩu:

    • Việc đặt __loader__ trên mô-đun trong khi không đặt được __spec__.loader không được dùng nữa. Trong Python 3.16, __loader__ sẽ không còn được thiết lập hoặc xem xét bởi hệ thống nhập hoặc thư viện chuẩn.

  • array:

    • Mã định dạng 'u' (wchar_t) không còn được dùng trong tài liệu kể từ Python 3.3 và trong thời gian chạy kể từ Python 3.13. Thay vào đó, hãy sử dụng mã định dạng 'w' (Py_UCS4) cho các ký tự Unicode.

  • asyncio:

  • builtins:

    • Đảo ngược bit trên các loại boolean, ~True hoặc ~False đã không được dùng nữa kể từ Python 3.12, vì nó tạo ra kết quả đáng ngạc nhiên và không trực quan (-2-1). Thay vào đó, hãy sử dụng not x để phủ định logic của Boolean. Trong trường hợp hiếm hoi mà bạn cần đảo ngược bitwise của số nguyên cơ bản, hãy chuyển đổi rõ ràng sang int (~int(x)).

  • functools:

    • Việc gọi triển khai Python của functools.reduce() bằng function hoặc sequence làm đối số từ khóa đã không được dùng nữa kể từ Python 3.14.

  • logging:

    Hỗ trợ trình xử lý ghi nhật ký tùy chỉnh với đối số strm không được dùng nữa và được lên lịch xóa trong Python 3.16. Thay vào đó, hãy xác định trình xử lý bằng đối số stream. (Được đóng góp bởi Mariusz Felisiak trong gh-115032.)

  • mimetypes:

    • Tiện ích mở rộng hợp lệ bắt đầu bằng dấu '.' hoặc trống cho mimetypes.MimeTypes.add_type(). Các tiện ích mở rộng không có dấu chấm không được dùng nữa và sẽ tăng ValueError trong Python 3.16. (Được đóng góp bởi Hugo van Kemenade trong gh-75223.)

  • shutil:

    • Ngoại lệ ExecError đã không được dùng nữa kể từ Python 3.14. Nó chưa được sử dụng bởi bất kỳ chức năng nào trong shutil kể từ Python 3.4 và hiện là bí danh của RuntimeError.

  • symtable:

    • Phương thức Class.get_methods đã không được dùng nữa kể từ Python 3.14.

  • sys:

  • sysconfig:

    • Hàm sysconfig.expand_makefile_vars() đã không được dùng nữa kể từ Python 3.14. Thay vào đó, hãy sử dụng đối số vars của sysconfig.get_paths().

  • tarfile:

    • Thuộc tính TarFile.tarfile không có giấy tờ và không được sử dụng đã không được dùng nữa kể từ Python 3.13.

Đang chờ xóa trong Python 3.17

  • collections.abc:

    • collections.abc.ByteString được lên kế hoạch xóa trong Python 3.17.

      Sử dụng isinstance(obj, collections.abc.Buffer) để kiểm tra xem obj có triển khai buffer protocol khi chạy hay không. Để sử dụng trong chú thích loại, hãy sử dụng Buffer hoặc liên kết chỉ định rõ ràng các loại mà mã của bạn hỗ trợ (ví dụ: bytes | bytearray | memoryview).

      ByteString ban đầu được dự định là một lớp trừu tượng sẽ đóng vai trò là siêu kiểu của cả bytesbytearray. Tuy nhiên, vì ABC chưa bao giờ có bất kỳ phương thức nào nên việc biết rằng một đối tượng là một thể hiện của ByteString chưa bao giờ thực sự cho bạn biết bất kỳ điều gì hữu ích về đối tượng đó. Các loại bộ đệm phổ biến khác như memoryview cũng không bao giờ được hiểu là kiểu con của ByteString (trong thời gian chạy hoặc bằng trình kiểm tra kiểu tĩnh).

      Xem PEP 688 để biết thêm chi tiết. (Được đóng góp bởi Shantanu Jain trong gh-91896.)

  • typing:

    • Trước Python 3.14, các hợp nhất kiểu cũ đã được triển khai bằng lớp riêng typing._UnionGenericAlias. Lớp này không còn cần thiết cho việc triển khai nhưng nó đã được giữ lại để tương thích ngược, với kế hoạch loại bỏ đối với Python 3.17. Người dùng nên sử dụng các công cụ trợ giúp xem xét nội tâm được ghi lại như typing.get_origin()typing.get_args() thay vì dựa vào các chi tiết triển khai riêng tư.

    • typing.ByteString, không được dùng nữa kể từ Python 3.9, được lên lịch xóa trong Python 3.17.

      Sử dụng isinstance(obj, collections.abc.Buffer) để kiểm tra xem obj có triển khai buffer protocol khi chạy hay không. Để sử dụng trong chú thích loại, hãy sử dụng Buffer hoặc liên kết chỉ định rõ ràng các loại mà mã của bạn hỗ trợ (ví dụ: bytes | bytearray | memoryview).

      ByteString ban đầu được dự định là một lớp trừu tượng sẽ đóng vai trò là siêu kiểu của cả bytesbytearray. Tuy nhiên, vì ABC chưa bao giờ có bất kỳ phương thức nào nên việc biết rằng một đối tượng là một thể hiện của ByteString chưa bao giờ thực sự cho bạn biết bất kỳ điều gì hữu ích về đối tượng đó. Các loại bộ đệm phổ biến khác như memoryview cũng không bao giờ được hiểu là kiểu con của ByteString (trong thời gian chạy hoặc bằng trình kiểm tra kiểu tĩnh).

      Xem PEP 688 để biết thêm chi tiết. (Được đóng góp bởi Shantanu Jain trong gh-91896.)

Đang chờ xóa trong Python 3.18

  • decimal:

    • Công cụ xác định định dạng Decimal không chuẩn và không có giấy tờ 'N', chỉ được hỗ trợ trong quá trình triển khai C của mô-đun decimal, đã không được dùng nữa kể từ Python 3.13. (Được đóng góp bởi Serhiy Storchaka trong gh-89902.)

Đang chờ xóa trong Python 3.19

  • ctypes:

    • Hoàn toàn chuyển sang bố cục cấu trúc tương thích với MSVC bằng cách đặt _pack_ chứ không phải _layout_ trên nền tảng không phải Windows.

Đang chờ xóa trong các phiên bản sau

Các API sau sẽ bị xóa trong tương lai, mặc dù hiện tại chưa có ngày dự kiến xóa chúng.

  • argparse:

    • Việc lồng các nhóm đối số và lồng các nhóm loại trừ lẫn nhau không được dùng nữa.

    • Việc chuyển đối số từ khóa không có giấy tờ prefix_chars sang add_argument_group() hiện không được dùng nữa.

    • Bộ chuyển đổi loại argparse.FileType không được dùng nữa.

  • builtins:

    • Trình tạo: chữ ký throw(type, exc, tb)athrow(type, exc, tb) không được dùng nữa: thay vào đó hãy sử dụng throw(exc)athrow(exc), chữ ký đối số duy nhất.

    • Hiện tại Python chấp nhận các ký tự số ngay sau các từ khóa, ví dụ 0in x, 1or x, 0if 1else 2. Nó cho phép các biểu thức khó hiểu và mơ hồ như [0x1for x in y] (có thể hiểu là [0x1 for x in y] hoặc [0x1f or x in y]). Cảnh báo cú pháp sẽ được đưa ra nếu ngay sau chữ số là một trong các từ khóa and, else, for, if, in, isor. Trong bản phát hành sau này, nó sẽ được thay đổi thành lỗi cú pháp. (gh-87999)

    • Hỗ trợ phương thức __index__()__int__() trả về kiểu không phải int: các phương thức này sẽ được yêu cầu trả về một phiên bản của lớp con nghiêm ngặt của int.

    • Hỗ trợ phương thức __float__() trả về một lớp con nghiêm ngặt của float: những phương thức này sẽ được yêu cầu để trả về một phiên bản của float.

    • Hỗ trợ phương thức __complex__() trả về một lớp con nghiêm ngặt của complex: những phương thức này sẽ được yêu cầu để trả về một phiên bản của complex.

    • Việc truyền số phức dưới dạng đối số real hoặc imag trong hàm tạo complex() hiện không được dùng nữa; nó chỉ nên được thông qua dưới dạng một đối số vị trí duy nhất. (Được đóng góp bởi Serhiy Storchaka trong gh-109218.)

  • calendar: Các hằng số calendar.Januarycalendar.February không được dùng nữa và được thay thế bằng calendar.JANUARYcalendar.FEBRUARY. (Được đóng góp bởi Hoàng tử Roshan trong gh-103636.)

  • codecs: sử dụng open() thay vì codecs.open(). (gh-133038)

  • codeobject.co_lnotab: thay vào đó hãy sử dụng phương pháp codeobject.co_lines().

  • datetime:

    • utcnow(): sử dụng datetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp(): sử dụng datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).

  • gettext: Giá trị số nhiều phải là số nguyên.

  • importlib:

    • Tham số cache_from_source() debug_override không được dùng nữa: thay vào đó hãy sử dụng tham số optimization.

  • importlib.metadata:

    • giao diện bộ dữ liệu EntryPoints.

    • None ngầm định trên các giá trị trả về.

  • logging: phương thức warn() không được dùng nữa kể từ Python 3.3, thay vào đó hãy sử dụng warning().

  • mailbox: Việc sử dụng chế độ văn bản và đầu vào StringIO không được dùng nữa, thay vào đó hãy sử dụng BytesIO và chế độ nhị phân.

  • os: Gọi os.register_at_fork() trong quy trình đa luồng.

  • pydoc.ErrorDuringImport: Giá trị bộ dữ liệu cho tham số exc_info không được dùng nữa, hãy sử dụng một phiên bản ngoại lệ.

  • re: Các quy tắc nghiêm ngặt hơn hiện được áp dụng cho tham chiếu nhóm số và tên nhóm trong biểu thức chính quy. Hiện chỉ có chuỗi chữ số ASCII được chấp nhận làm tham chiếu số. Tên nhóm trong mẫu byte và chuỗi thay thế hiện chỉ có thể chứa các chữ cái, chữ số và dấu gạch dưới ASCII. (Được đóng góp bởi Serhiy Storchaka trong gh-91760.)

  • mô-đun sre_compile, sre_constantssre_parse.

  • shutil: Tham số onerror của rmtree() không được dùng nữa trong Python 3.12; thay vào đó hãy sử dụng tham số onexc.

  • Các tùy chọn và giao thức ssl:

    • ssl.SSLContext không có đối số giao thức sẽ không được dùng nữa.

    • ssl.SSLContext: set_npn_protocols()selected_npn_protocol() không được dùng nữa: thay vào đó hãy sử dụng ALPN.

    • tùy chọn ssl.OP_NO_SSL*

    • tùy chọn ssl.OP_NO_TLS*

    • ssl.PROTOCOL_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • phương pháp threading:

  • typing.Text (gh-92332).

  • Lớp nội bộ typing._UnionGenericAlias không còn được sử dụng để triển khai typing.Union nữa. Để duy trì khả năng tương thích với người dùng sử dụng lớp riêng tư này, một miếng chêm tương thích sẽ được cung cấp cho đến ít nhất là Python 3.17. (Được đóng góp bởi Jelle Zijlstra trong gh-105499.)

  • unittest.IsolatedAsyncioTestCase: không được dùng để trả về giá trị không phải là None từ trường hợp thử nghiệm.

  • urllib.parse các hàm không được dùng nữa: thay vào đó là urlparse()

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • wsgiref: SimpleHandler.stdout.write() không nên ghi một phần.

  • xml.etree.ElementTree: Việc kiểm tra giá trị thực của Element không được dùng nữa. Trong bản phát hành sau này, nó sẽ luôn trả về True. Thay vào đó, hãy ưu tiên các bài kiểm tra len(elem) hoặc elem is not None rõ ràng.

  • sys._clear_type_cache() không được dùng nữa: thay vào đó hãy sử dụng sys._clear_internal_caches().

Thay đổi mã byte CPython

  • Đã thay thế opcode BINARY_SUBSCR bằng opcode BINARY_OP bằng oparg NB_SUBSCR. (Được đóng góp bởi Irit Katriel trong gh-100239.)

  • Thêm các mã hoạt động BUILD_INTERPOLATIONBUILD_TEMPLATE để xây dựng các phiên bản InterpolationTemplate mới tương ứng. (Được đóng góp bởi Lysandros Nikolaou và những người khác trong gh-132661; xem thêm PEP 750: Template strings).

  • Loại bỏ opcode BUILD_CONST_KEY_MAP. Thay vào đó hãy sử dụng BUILD_MAP. (Được đóng góp bởi Mark Shannon trong gh-122160.)

  • Thay thế opcode LOAD_ASSERTION_ERROR bằng LOAD_COMMON_CONSTANT và thêm hỗ trợ tải NotImplementedError.

  • Thêm các mã hoạt động LOAD_FAST_BORROWLOAD_FAST_BORROW_LOAD_FAST_BORROW để giảm chi phí tính tham chiếu khi trình thông dịch có thể chứng minh rằng tham chiếu trong khung tồn tại lâu hơn tham chiếu được tải lên ngăn xếp. (Được đóng góp bởi Matt Page trong gh-130704.)

  • Thêm opcode LOAD_SMALL_INT để đẩy một số nguyên nhỏ bằng oparg vào ngăn xếp. Mã hoạt động RETURN_CONST bị xóa vì nó không còn được sử dụng nữa. (Được đóng góp bởi Mark Shannon trong gh-125837.)

  • Thêm lệnh LOAD_SPECIAL mới. Tạo mã cho câu lệnh withasync with bằng lệnh mới. Đã xóa hướng dẫn BEFORE_WITHBEFORE_ASYNC_WITH. (Được đóng góp bởi Mark Shannon trong gh-120507.)

  • Thêm opcode POP_ITER để hỗ trợ các trình vòng lặp 'ảo'. (Được đóng góp bởi Mark Shannon trong gh-132554.)

Hướng dẫn giả

  • Thêm lệnh giả ANNOTATIONS_PLACEHOLDER để hỗ trợ các chú thích cấp mô-đun được thực hiện một phần với deferred evaluation of annotations. (Được đóng góp bởi Jelle Zijlstra trong gh-130907.)

  • Thêm lệnh giả BINARY_OP_EXTEND, lệnh này thực thi một cặp chức năng (chức năng bảo vệ và chức năng chuyên môn hóa) được truy cập từ bộ đệm nội tuyến. (Được đóng góp bởi Irit Katriel trong gh-100239.)

  • Thêm ba chuyên ngành cho CALL_KW; CALL_KW_PY cho các lệnh gọi đến hàm Python, CALL_KW_BOUND_METHOD cho các lệnh gọi đến các phương thức bị ràng buộc và CALL_KW_NON_PY cho tất cả các lệnh gọi khác. (Được đóng góp bởi Mark Shannon trong gh-118093.)

  • Thêm các lệnh giả JUMP_IF_TRUEJUMP_IF_FALSE, các bước nhảy có điều kiện không ảnh hưởng đến ngăn xếp. Thay thế bằng dãy COPY 1, TO_BOOL, POP_JUMP_IF_TRUE/FALSE. (Được đóng góp bởi Irit Katriel trong gh-124285.)

  • Thêm lệnh giả LOAD_CONST_MORTAL. (Được đóng góp bởi Mark Shannon trong gh-128685.)

  • Thêm lệnh giả LOAD_CONST_IMMORTAL, hoạt động tương tự như LOAD_CONST nhưng hiệu quả hơn đối với các vật thể bất tử. (Được đóng góp bởi Mark Shannon trong gh-125837.)

  • Thêm lệnh giả NOT_TAKEN, được sys.monitoring sử dụng để ghi lại các sự kiện nhánh (chẳng hạn như BRANCH_LEFT). (Được đóng góp bởi Mark Shannon trong gh-122548.)

C API thay đổi

Cấu hình Python C API

Thêm PyInitConfig C API để định cấu hình khởi tạo Python mà không cần dựa vào cấu trúc C và khả năng thực hiện các thay đổi tương thích với ABI trong tương lai.

Hoàn thành PEP 587 PyConfig C API bằng cách thêm PyInitConfig_AddModule() có thể được sử dụng để thêm mô-đun mở rộng tích hợp; một tính năng trước đây được gọi là "inittab".

Thêm các hàm PyConfig_Get()PyConfig_Set() để nhận và đặt cấu hình thời gian chạy hiện tại.

PEP 587 'Cấu hình khởi tạo Python' thống nhất tất cả các cách để định cấu hình khởi tạo Python. Zz001zz này cũng hợp nhất cấu hình khởi tạo và khởi tạo trước của Python trong một API duy nhất. Hơn nữa, PEP này chỉ cung cấp một lựa chọn duy nhất để nhúng Python, thay vì có hai lựa chọn 'Python' và 'Isolated' (PEP 587), để đơn giản hóa hơn nữa API.

PEP 587 PyConfig API cấp thấp hơn vẫn có sẵn cho các trường hợp sử dụng với mức độ kết hợp cao hơn có chủ ý với các chi tiết triển khai CPython (chẳng hạn như mô phỏng toàn bộ chức năng của CLI của CPython, bao gồm cả các cơ chế cấu hình của nó).

(Được đóng góp bởi Victor Stinner trong gh-107954.)

Xem thêm

PEP 741PEP 587

Tính năng mới trên C API

Thay đổi giới hạn C API

API C đã bị xóa

  • Việc tạo immutable types với các cơ sở có thể thay đổi không được dùng nữa trong Python 3.12 và hiện tăng TypeError. (Được đóng góp bởi Nikita Sobolev trong gh-119775.)

  • Xóa thành viên PyDictObject.ma_version_tag, thành viên này không được dùng nữa trong Python 3.12. Thay vào đó hãy sử dụng PyDict_AddWatcher() API. (Được đóng góp bởi Sam Gross trong gh-124296.)

  • Loại bỏ chức năng _Py_InitializeMain() riêng tư. Đó là một provisional API được thêm vào Python 3.8 bởi PEP 587. (Được đóng góp bởi Victor Stinner trong gh-129033.)

  • Xóa các API không có giấy tờ Py_C_RECURSION_LIMITPyThreadState.c_recursion_remaining. Chúng đã được thêm vào trong phiên bản 3.13 và đã bị xóa mà không bị phản đối. Sử dụng Py_EnterRecursiveCall() để bảo vệ khỏi đệ quy chạy trốn trong mã C. (Đã bị xóa bởi Petr Viktorin trong gh-133079, xem thêm gh-130396.)

API C không được dùng nữa

Đang chờ xóa trong Python 3.15

Đang chờ xóa trong Python 3.16

  • Bản sao đi kèm của libmpdec.

Đang chờ xóa trong Python 3.18

Đang chờ xóa trong các phiên bản sau

Các API sau không còn được dùng nữa và sẽ bị xóa, mặc dù hiện tại chưa có ngày dự kiến xóa chúng.

Xây dựng các thay đổi

  • PEP 776: Emscripten hiện là nền tảng được hỗ trợ chính thức tại tier 3. Là một phần của nỗ lực này, hơn 25 lỗi trong Emscripten libc đã được sửa. Emscripten hiện bao gồm hỗ trợ cho ctypes, termiosfcntl, cũng như hỗ trợ thử nghiệm cho default interactive shell mới. (Được đóng góp bởi R. Hood Chatham trong gh-127146, gh-127683gh-136931.)

  • Bản phát hành nhị phân chính thức của Android hiện được cung cấp trên python.org.

  • GNU Autoconf 2.72 hiện được yêu cầu để tạo configure. (Được đóng góp bởi Erlend Aasland trong gh-115765.)

  • wasm32-unknown-emscripten hiện là nền tảng PEP 11 cấp 3. (Được đóng góp bởi R. Hood Chatham trong gh-127146, gh-127683gh-136931.)

  • Giờ đây, liên kết dựa trên #pragma với python3*.lib có thể được tắt bằng Py_NO_LINK_LIB. (Được đóng góp bởi Jean-Christophe Fillion-Robin trong gh-82909.)

  • CPython hiện cho phép một tập hợp các tùy chọn trình biên dịch được đề xuất theo mặc định để cải thiện tính bảo mật. Sử dụng tùy chọn --disable-safety configure để tắt chúng hoặc tùy chọn --enable-slower-safety để có tập hợp tùy chọn trình biên dịch lớn hơn, mặc dù có chi phí hiệu năng.

  • Tùy chọn macro WITH_FREELISTS--without-freelists configure đã bị xóa.

  • Tùy chọn configure mới --with-tail-call-interp có thể được sử dụng để kích hoạt trình thông dịch cuộc gọi đuôi thử nghiệm. Xem Một loại thông dịch viên mới để biết thêm chi tiết.

  • Để tắt hỗ trợ gỡ lỗi từ xa mới, hãy sử dụng tùy chọn --without-remote-debug configure. Điều này có thể hữu ích vì lý do bảo mật.

  • Hiện tại, các ứng dụng iOS và macOS có thể được định cấu hình để chuyển hướng nội dung stdoutstderr sang nhật ký hệ thống. (Được đóng góp bởi Russell Keith-Magee trong gh-127592.)

  • Nền tảng thử nghiệm iOS hiện có thể truyền phát đầu ra thử nghiệm trong khi thử nghiệm đang chạy. Nền tảng thử nghiệm cũng có thể được sử dụng để chạy bộ thử nghiệm của các dự án khác ngoài CPython. (Được đóng góp bởi Russell Keith-Magee trong gh-127592.)

build-details.json

Các bản cài đặt Python hiện chứa một tệp mới, build-details.json. Đây là tài liệu JSON tĩnh chứa các chi tiết bản dựng cho CPython, cho phép xem xét nội tâm mà không cần chạy mã. Điều này hữu ích cho các trường hợp sử dụng như trình khởi chạy Python, biên dịch chéo, v.v.

build-details.json phải được cài đặt trong thư mục thư viện tiêu chuẩn độc lập với nền tảng. Điều này tương ứng với đường dẫn cài đặt 'stdlib' sysconfig, có thể tìm thấy bằng cách chạy sysconfig.get_path('stdlib').

Xem thêm

PEP 739 -- build-details.json 1.0 -- một tệp mô tả tĩnh cho chi tiết bản dựng Python

Ngừng chữ ký PGP

Chữ ký PGP (Quyền riêng tư khá tốt) sẽ không được cung cấp cho các bản phát hành Python 3.14 hoặc các phiên bản trong tương lai. Để xác minh các tạo phẩm CPython, người dùng phải sử dụng Sigstore verification materials. Các bản phát hành đã được ký bằng Sigstore kể từ Python 3.11.

Sự thay đổi trong quá trình phát hành này đã được chỉ định trong PEP 761.

Python luồng miễn phí được hỗ trợ chính thức

Bản dựng Python theo luồng miễn phí hiện đã được hỗ trợ và không còn mang tính thử nghiệm nữa. Đây là sự khởi đầu của phase II nơi Python có luồng tự do được hỗ trợ chính thức nhưng vẫn là tùy chọn.

Nhóm tạo luồng miễn phí tự tin rằng dự án đang đi đúng hướng và đánh giá cao sự cống hiến không ngừng của mọi người đang làm việc để khiến luồng miễn phí sẵn sàng được áp dụng rộng rãi hơn trong cộng đồng Python.

Với những đề xuất này và sự chấp nhận PEP này, cộng đồng nhà phát triển Python nên quảng cáo rộng rãi rằng phân luồng miễn phí là một tùy chọn xây dựng Python được hỗ trợ trong hiện tại và trong tương lai, đồng thời nó sẽ không bị xóa nếu không có lịch trình ngừng sử dụng thích hợp.

Mọi quyết định chuyển sang phase III, với tính năng tự do phân luồng làm bản dựng mặc định hoặc duy nhất của Python vẫn chưa được quyết định và phụ thuộc vào nhiều yếu tố cả trong chính CPython và cộng đồng. Quyết định này là dành cho tương lai.

Bản phát hành nhị phân cho trình biên dịch đúng lúc thử nghiệm

Các tệp nhị phân phát hành chính thức của macOS và Windows hiện bao gồm trình biên dịch experimental just-in-time (JIT). Mặc dù not được khuyến nghị sử dụng trong sản xuất nhưng nó có thể được kiểm tra bằng cách đặt PYTHON_JIT=1 làm biến môi trường. Các bản dựng và nhà phân phối lại nguồn hạ nguồn có thể sử dụng tùy chọn cấu hình --enable-experimental-jit=yes-off cho hành vi tương tự.

Zz003zz đang ở giai đoạn đầu và vẫn đang trong quá trình phát triển tích cực. Do đó, tác động điển hình đến hiệu suất của việc kích hoạt tính năng này có thể chậm hơn từ 10% đến nhanh hơn 20%, tùy thuộc vào khối lượng công việc. Để hỗ trợ việc kiểm tra và đánh giá, một tập hợp các hàm xem xét nội tâm đã được cung cấp trong không gian tên sys._jit. sys._jit.is_available() có thể được sử dụng để xác định xem tệp thực thi hiện tại có hỗ trợ biên dịch JIT hay không, trong khi sys._jit.is_enabled() có thể được sử dụng để biết liệu trình biên dịch JIT có được bật cho quy trình hiện tại hay không.

Hiện tại, chức năng bị thiếu quan trọng nhất là các trình gỡ lỗi và trình lược tả gốc như gdbperf không thể giải phóng thông qua các khung JIT (các trình gỡ lỗi và trình lược tả Python, như pdb hoặc profile, tiếp tục hoạt động mà không cần sửa đổi). Các bản dựng luồng miễn phí không hỗ trợ biên dịch JIT.

Vui lòng báo cáo bất kỳ lỗi hoặc sự hồi quy hiệu suất lớn nào mà bạn gặp phải!

Xem thêm

PEP 744

Chuyển sang Python 3.14

Phần này liệt kê các thay đổi được mô tả trước đây và các bản sửa lỗi khác có thể yêu cầu thay đổi mã của bạn.

Những thay đổi trong Python API

  • Trên các nền tảng Unix không phải macOS, forkserver hiện là start method mặc định cho multiprocessingProcessPoolExecutor, thay vì fork.

    Xem (1)(2) để biết chi tiết.

    Nếu bạn gặp phải lỗi NameErrors hoặc lỗi tẩy từ multiprocessing hoặc concurrent.futures, hãy xem forkserver restrictions.

    Thay đổi này không ảnh hưởng đến Windows hoặc macOS, trong đó 'spawn' vẫn là phương thức khởi động mặc định.

  • functools.partial hiện là bộ mô tả phương thức. Gói nó trong staticmethod() nếu bạn muốn giữ nguyên hành vi cũ. (Được đóng góp bởi Serhiy Storchaka và Dominykas Grigonis trong gh-121027.)

  • garbage collector is now incremental, có nghĩa là hành vi của gc.collect() thay đổi một chút:

    • gc.collect(1): Thực hiện tăng cường thu thập rác thay vì thu thập thế hệ 1.

    • Các lệnh gọi tới gc.collect() khác không thay đổi.

  • Hàm locale.nl_langinfo() hiện tạm thời đặt ngôn ngữ LC_CTYPE trong một số trường hợp. Thay đổi tạm thời này ảnh hưởng đến các chủ đề khác. (Được đóng góp bởi Serhiy Storchaka trong gh-69998.)

  • types.UnionType hiện là bí danh của typing.Union, gây ra những thay đổi trong một số hành vi. Xem above để biết thêm chi tiết. (Được đóng góp bởi Jelle Zijlstra trong gh-105499.)

  • Hành vi thời gian chạy của chú thích đã thay đổi theo nhiều cách khác nhau; xem above để biết chi tiết. Mặc dù hầu hết mã tương tác với chú thích sẽ tiếp tục hoạt động nhưng một số chi tiết không có giấy tờ có thể hoạt động khác.

  • Là một phần của việc công khai mimetypes CLI, giờ đây nó thoát với 1 do lỗi thay vì 02 trên các tham số dòng lệnh không chính xác thay vì 1. Thông báo lỗi hiện được in ra stderr.

  • Mẫu \B trong biểu thức chính quy hiện khớp với chuỗi trống khi được cung cấp dưới dạng toàn bộ mẫu, điều này có thể gây ra các thay đổi về hành vi.

  • Trên FreeBSD, sys.platform không còn chứa số phiên bản chính nữa.

Thay đổi về chú thích (PEP 649PEP 749)

Phần này chứa hướng dẫn về những thay đổi có thể cần thiết đối với các chú thích hoặc mã Python tương tác với hoặc xem xét nội tâm các chú thích, do những thay đổi liên quan đến deferred evaluation of annotations.

Trong phần lớn các trường hợp, mã làm việc từ các phiên bản Python cũ hơn sẽ không yêu cầu bất kỳ thay đổi nào.

Ý nghĩa của mã chú thích

Nếu bạn xác định chú thích trong mã của mình (ví dụ: để sử dụng với trình kiểm tra kiểu tĩnh), thì thay đổi này có thể không ảnh hưởng đến bạn: bạn có thể tiếp tục viết chú thích giống như cách bạn đã làm với các phiên bản Python trước đó.

Bạn có thể sẽ xóa các chuỗi được trích dẫn trong chú thích, thường được sử dụng để tham chiếu chuyển tiếp. Tương tự, nếu bạn sử dụng from __future__ import annotations để tránh phải viết chuỗi trong chú thích, bạn có thể xóa nội dung nhập đó khi bạn chỉ hỗ trợ Python 3.14 trở lên. Tuy nhiên, nếu bạn dựa vào thư viện của bên thứ ba để đọc chú thích thì những thư viện đó có thể cần thay đổi để hỗ trợ chú thích không trích dẫn trước khi chúng hoạt động như mong đợi.

Ý nghĩa dành cho độc giả của __annotations__

Nếu mã của bạn đọc thuộc tính __annotations__ trên các đối tượng, bạn có thể muốn thực hiện các thay đổi để hỗ trợ mã dựa trên đánh giá trì hoãn các chú thích. Ví dụ: bạn có thể muốn sử dụng annotationlib.get_annotations() với định dạng FORWARDREF, giống như mô-đun dataclasses hiện nay.

Gói typing_extensions bên ngoài cung cấp các bản sao lưu một phần của một số chức năng của mô-đun annotationlib, chẳng hạn như Format enum và hàm get_annotations(). Chúng có thể được sử dụng để viết mã phiên bản chéo tận dụng hành vi mới trong Python 3.14.

from __future__ import annotations

Trong Python 3.7, PEP 563 đã giới thiệu from __future__ import annotations future statement, biến tất cả các chú thích thành chuỗi.

Tuy nhiên, câu lệnh này hiện không còn được dùng nữa và dự kiến nó sẽ bị xóa trong phiên bản Python trong tương lai. Việc loại bỏ này sẽ không xảy ra cho đến khi Python 3.13 hết vòng đời vào năm 2029, là phiên bản cuối cùng của Python không hỗ trợ đánh giá trì hoãn các chú thích.

Trong Python 3.14, hành vi của mã sử dụng from __future__ import annotations không thay đổi.

Những thay đổi trong C API

  • Py_Finalize() hiện xóa tất cả các chuỗi được thực hiện. Điều này không tương thích ngược với bất kỳ tiện ích mở rộng C nào giữ một chuỗi nội bộ sau lệnh gọi tới Py_Finalize() và sau đó được sử dụng lại sau lệnh gọi tới Py_Initialize(). Bất kỳ sự cố nào phát sinh từ hành vi này thường sẽ dẫn đến sự cố trong quá trình thực hiện lệnh gọi tiếp theo tới Py_Initialize() để truy cập vào bộ nhớ chưa được khởi tạo. Để khắc phục, hãy sử dụng trình khử trùng địa chỉ để xác định mọi lượt sử dụng sau khi rảnh đến từ một chuỗi được nội bộ và phân bổ nó trong khi tắt mô-đun. (Được đóng góp bởi Eddie Elizondo trong gh-113601.)

  • Unicode Exception Objects C API hiện tăng TypeError nếu đối số ngoại lệ của nó không phải là đối tượng UnicodeError. (Được đóng góp bởi Bénédikt Trần trong gh-127691.)

Những thay đổi đáng chú ý trong 3.14.1