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 Reference và Language 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:
Syntax highlighting in the default interactive shell và đầu ra màu trong một số CLI thư viện tiêu chuẩn
C API cải tiến:
Hỗ trợ nền tảng:
PEP 776: Emscripten hiện là officially supported platform, tại tier 3.
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 749 và gh-119180; PEP 649 được viết bởi Larry Hastings.)
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 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 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) là 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:
Một biến môi trường
PYTHON_DISABLE_REMOTE_DEBUG.Tùy chọn dòng lệnh
-X disable-remote-debug.Cờ cấu hình
--without-remote-debugđể tắt hoàn toàn tính năng này tại thời điểm xây dựng.
(Được đóng góp bởi Pablo Galindo Salgado, Matt Wozniski và Ivona Stojanovic trong gh-131591.)
Xem thêm
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
eliftheo sau khốielsehiệ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 là ai Không có: ... 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
elsehoặc một trongpass,breakhoặccontinueđược chuyển trướcifthì 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
asvớ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-123562 và gh-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
dicthoặcset. (Đượ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 withthay vìwithvà 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.gzip và compression.zlib tái xuất các mô-đun lzma, bz2, gzip và zlib 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, zipfile và shutil.
Đâ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 lzma và bz2.
(Đượ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
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
└── ví 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ụngawaitkhô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ặcpython -O -c 'assert await 1'hiện tạo raSyntaxErrors. (Đượ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()vàbytearray.fromhex()hiện chấp nhận ASCIIbytesvà bytes-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()vàcomplex.from_number()để chuyển đổi một số thành loạifloathoặccomplextương ứng. Họ đưa raTypeErrornế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 sangint()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
memoryviewhiệ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
NotImplementedtrong ngữ cảnh boolean giờ đây sẽ tạo raTypeError. Điều này đã tăngDeprecationWarningkể 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 trongpow()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
superhiện làcopyablevàpickleable. (Đượ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=2mới. Khi một mô-đun như vậy được nhập, thời gianselfvàcumulativeđược thay thế bằng chuỗicached.Các giá trị trên
2cho-X importtimehiệ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
-chiệ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ếutextwrap.dedent(). (Được đóng góp bởi Jon Crall và Steven Sun trong gh-103998.)-Jkhô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 except và except* không có dấu ngoặc¶
Các biểu thức except và except* 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 758 và gh-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_REPLhoặ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ệnhPYTHONSTARTUP. 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 covà nhấn <Tab> sẽ gợi ý các mô-đun bắt đầu bằngco. Tương tự, gõfrom concurrent import isẽ gợi ý các mô-đun con củaconcurrentbắt đầu bằngi. 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ồmcompression.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.ArgumentParserhiệ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,--optimizevà--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ạoTaskhoặc nhà máy tác vụ tùy chỉnh. (Xemset_task_factory()để biết chi tiết.) Các đối số từ khóanamevàcontextkhô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óanamecủa nhà máy vàcontextcó 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()và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
interpretersmớ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()và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¶
configparsersẽ 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ímwrite()chứa dấu phân cách hoặc bắt đầu bằng mẫu tiêu đề phần sẽ tạo raInvalidWriteError. (Được đóng góp bởi Jacob Lincoln trong gh-129270.)
bối cảnh¶
Hỗ trợ giao thức context manager cho các đối tượng
Token. (Được đóng góp bởi Andrew Svetlov trong gh-129889.)
ctypes¶
Bố cục của bit fields trong các đối tượng
StructurevàUnionhiệ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/Unionhiện có sẵn dưới dạngCFieldvà 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ệ
COMErrorhiệ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ượngmemoryviewtham 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_complexvàc_longdouble_complex, hiện có sẵn nếu cả trình biên dịch và thư việnlibffiđề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ạictypestươ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_objecthiện hỗ trợ đăng ký, biến nó thành generic type. (Được đóng góp bởi Brian Schubert trong gh-132168.)ctypeshiện hỗ trợ free-threading builds. (Được đóng góp bởi Kumar Aditya và Peter Bierma trong gh-127945.)
chửi rủa¶
Thêm chức năng
assume_default_colors(), một cải tiến của chức nănguse_default_colors()cho phép thay đổi cặp màu0. (Được đóng góp bởi Serhiy Storchaka trong gh-133139.)
ngày giờ¶
Thêm phương thức
strptime()vào các lớpdatetime.datevàdatetime.time. (Được đóng góp bởi Wannes Boeykens trong gh-41431.)
số thập phân¶
Thêm
Decimal.from_number()làm hàm tạo thay thế choDecimal. (Đượ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¶
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¶
người xử lý lỗi¶
Thêm hỗ trợ in dấu vết ngăn xếp C trên các hệ thống support it thông qua hàm
dump_c_stack()mới hoặc thông qua đối số c_stack trongfaulthandler.enable(). (Được đóng góp bởi Peter Bierma trong gh-127604.)
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
Fractioncó thể được xây dựng từ bất kỳ đối tượng nào bằng phương thứcas_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ế choFraction. (Đượ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àmpartial()hoặcpartialmethod()để 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¶
vượt qua¶
đồ họa¶
Cho phép gọi
TopologicalSorter.prepare()nhiều lần miễn là việc phân loại chưa bắt đầu. (Được đóng góp bởi Daniel Pope trong gh-130914.)
đống q¶
Mô-đun
heapqđã cải thiện khả năng hỗ trợ làm việc với vùng heap tối đa, thông qua các chức năng mới sau:
hmac¶
http¶
Danh sách thư mục và các trang lỗi do mô-đun
http.servertạ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.serverhiện hỗ trợ phân phát trên HTTPS bằng cách sử dụng lớphttp.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:--tls-cert <path>: Đường dẫn tới file chứng chỉ TLS.--tls-key <path>: Đường dẫn tùy chọn tới file khóa riêng.--tls-password-file <path>: Đường dẫn tùy chọn tới file mật khẩu cho khóa riêng.
(Được đóng góp bởi Semyon Moroz trong gh-85162.)
imaplib¶
Thêm
IMAP4.idle(), thực hiện lệnh IMAP4IDLEnhư đượ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átannotationlib.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
readgiờ đây có thể tăngBlockingIOErrornế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
ReadervàWriterlàm các lựa chọn thay thế đơn giản hơn cho các giao thức giảtyping.IO,typing.TextIOvàtyping.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
jsonlà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¶
ghi nhật ký.handlers¶
Các đối tượng
QueueListenerhiện hỗ trợ giao thức context manager. (Được đóng góp bởi Charles Machalow trong gh-132106.)QueueListener.starthiện tăngRuntimeErrornếu trình nghe đã bắt đầu. (Được đóng góp bởi Charles Machalow trong gh-132106.)
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-fontobjectBố cục OpenType (OTF)
font/otfLoại thật:
font/ttfWOFF 1.0
font/woffWOFF 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
.avithànhvideo/vnd.avivà cho.wavthànhaudio/vnd.waveRFC 4337: Thêm MPEG-4
audio/mp4(.m4a)RFC 5334: Thêm phương tiện Ogg (
.oga,.oggvà.ogx)RFC 6713: Thêm gzip
application/gzip(.gz)RFC 9639: Thêm FLAC
audio/flac(.flac)RFC 9512
application/yamlMIME loại cho các tập tin YAML (.yamlvà.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ặtThê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,.pptxvà.xlsxOASIS: Thêm các loại OpenDocument
.odg,.odp,.odsvà.odtW3C: 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-85957 và gh-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 quaset_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ủamultiprocessinghiệ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 list và dict có được các phương thức bị thiếu trước đây bị bỏ qua:
clear()vàcopy()cho proxy củalistfromkeys(),reversed(d),d | {},{} | d,d |= {'b': 2}cho proxy củadict
(Đượ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ẻ quaSyncManager.set(). Phương thứcset()trongManager()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ượngmultiprocessing.Process, việc này sẽ kết thúc tiến trình con bằng cách gửiSIGINT. Điều này cho phép các mệnh đềfinallyin 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()vàis_not_none()làm một cặp hàm, sao chooperator.is_none(obj)tương đương vớiobj is Nonevàoperator.is_not_none(obj)tương đương vớiobj is not None. (Được đóng góp bởi Raymond Hettinger và Nico Mexis trong gh-115808.)
hệ điều hành¶
Thêm chức năng
reload_environ()để cập nhậtos.environvàos.environbvới các thay đổi đối với môi trường doos.putenv(),os.unsetenv()thực hiện hoặc được thực hiện bên ngoài Python trong cùng một quy trình. (Được đóng góp bởi Victor Stinner trong gh-120057.)Thêm hằng số
SCHED_DEADLINEvàSCHED_NORMALvào mô-đunos. (Được đóng góp bởi James Roy trong gh-127688.)Thêm hàm
readinto()để đọc thành buffer object từ bộ mô tả tệp. (Được đóng góp bởi Cody Maloney trong gh-129205.)
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àiFileNotFoundErrorsẽ 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ứcpathlib.types.PathInfomớ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 doiterdir()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
pdbhiệ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 PIDmớ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()vàset_trace()) hiện sử dụng lại phiên bảnPdbgần đây nhất gọiset_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ưdisplayvàcommandsđề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ệnhrestartkhipdbở 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ặcEOFsẽ xác nhận thoát và gọisys.exit(), thay vì tăngbdb.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ặcpdb.set_trace()sẽ luôn dừng chương trình ở khung đang gọi, bỏ qua mẫuskip(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òngpdbsẽ đ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ệnhawaitđượ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
pdbsẽ đượ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ốcolorizemới được thêm vào củapdb.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
picklethà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ô-đunplatform. (Đượ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ợ
\zlàm từ đồng nghĩa với\Ztrongregular 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.)\Btrongregular expressionhiệ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_HCItrên FreeBSD. (Được đóng góp bởi Victor Stinner trong gh-111178.)Thêm hỗ trợ cho
BTPROTO_SCOtrên FreeBSD. (Được đóng góp bởi Serhiy Storchaka trong gh-85302.)Thêm hỗ trợ cho cid và bdaddr_type trong địa chỉ dành cho
BTPROTO_L2CAPtrê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_HCItrê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_HCItrên Linux. (Được đóng góp bởi Serhiy Storchaka trong gh-132099.)Trả về cid trong
getsockname()choBTPROTO_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¶
cấu trúc¶
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.platformkhô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
DeprecationWarningchosys._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_LEFTvàBRANCH_RIGHT. Chúng thay thế và loại bỏ sự kiệnBRANCH. (Được đóng góp bởi Mark Shannon trong gh-122548.)
cấu hình hệ thống¶
Thêm key
ABIFLAGSvàoget_config_vars()trên Windows. (Được đóng góp bởi Xuehai Pan trong gh-131799.)
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-127987 và CVE 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-127987 và CVE 2024-12718.)extract()và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-4330 và CVE 2024-12718.)extract()vàextractall()không còn trích xuất các thành viên bị từ chối khierrorlevel()bằng 0. (Được đóng góp bởi Matt Prodani và Petr Viktorin trong gh-112887 và CVE 2025-4435.)
luồng¶
threading.Thread.start()hiện đặt tên luồng của hệ điều hành thànhthreading.Thread.name. (Được đóng góp bởi Victor Stinner trong gh-59705.)
tkinter¶
rùa¶
Thêm trình quản lý bối cảnh cho
turtle.fill(),turtle.poly()vàturtle.no_animation(). (Được đóng góp bởi Marie Roald và Yngve Mardal Moe trong gh-126350.)
các loại¶
types.UnionTypehiện là bí danh củatyping.Union. Xem below để biết thêm chi tiết. (Được đóng góp bởi Jelle Zijlstra trong gh-105499.)
đánh máy¶
Các loại
types.UnionTypevàtyping.Unionhiện là bí danh của nhau, nghĩa là cả các liên kết kiểu cũ (được tạo bằngUnion[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ảiis. 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ủatypes.UnionTypenhỏ hơn nhiều so với đối tượng được trả về bởiUnion[]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()và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.Uniontrong quá trình kiểm traisinstance(). Ví dụ:isinstance(int | str, typing.Union)sẽ trả vềTrue; trước đây điều này đã gây raTypeError.Thuộc tính
__args__của đối tượngtyping.Unionkhông thể ghi được nữa.Không thể đặt bất kỳ thuộc tính nào trên đối tượng
Unionnữ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.)
TypeAliasTypehiệ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¶
Đầu ra
unittesthiện được tô màu theo mặc định. Đ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-127221.)khám phá nhỏ nhất hỗ trợ namespace package làm thư mục bắt đầu lại. Nó đã bị xóa trong Python 3.11. (Được đóng góp bởi Jacob Walls trong gh-80958.)
Một số phương pháp mới đã được thêm vào lớp
TestCaseđể cung cấp các bài kiểm tra chuyên biệt hơn.assertHasAttr()vàassertNotHasAttr()kiểm tra xem đối tượng có thuộc tính cụ thể hay không.assertIsSubclass()vàassertNotIsSubclass()kiểm tra xem đối tượng là lớp con của một lớp cụ thể hay thuộc một trong các bộ lớp.assertStartsWith(),assertNotStartsWith(),assertEndsWith()vàassertNotEndsWith()kiểm tra xem chuỗi Unicode hoặc byte bắt đầu hay kết thúc bằng các chuỗi cụ thể.
(Được đóng góp bởi Serhiy Storchaka trong gh-71339.)
urllib¶
Nâng cấp thuật toán xác thực thông báo HTTP cho
urllib.requestbằ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
URLErrornế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ệOSErrornữ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()và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.)NILvàMAXhiệ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
BROWSERhiện có thể đề cập đến các trình duyệt đã được đăng ký cho mô-đunwebbrowser, thay vì luôn tạo lệnh trình duyệt mới.Điều này giúp có thể đặt
BROWSERthà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ượngZipInfođượcZipFile.writestrsử 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ườngSOURCE_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¶
Thời gian nhập cho một số mô-đun thư viện tiêu chuẩn đã được cải thiện, bao gồm
annotationlib,ast,asyncio,base64,cmd,csv,gettext,importlib.util,locale,mimetypes,optparse,pickle,pprint,pstats,shlex,socket,string,subprocess,threading,tomllib,types, vàzipfile.(Được đóng góp bởi Adam Turner, Bénédikt Tran, Chris Markiewicz, Eli Schwartz, Hugo van Kemenade, Jelle Zijlstra và những người khác trong gh-118761.)
Trình thông dịch hiện tránh được một số sửa đổi về số tham chiếu trong nội bộ khi thấy an toàn. Điều này có thể dẫn đến các giá trị khác nhau được trả về từ
sys.getrefcount()vàPy_REFCNT()so với các phiên bản Python trước đó. Xem below để biết chi tiết.
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ớpBdb. (Đượ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()vàset_threshold(), cùng vớiget_count()và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()và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¶
đường dẫn¶
Path.read_byteshiệ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¶
pdbhiện hỗ trợ hai phần phụ trợ, dựa trênsys.settrace()hoặcsys.monitoring. Việc sử dụng pdb CLI hoặcbreakpoint()sẽ luôn sử dụng phần phụ trợsys.monitoring. Việc khởi tạo rõ ràngpdb.Pdbvà 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¶
zlib¶
Trên Windows, zlib-ng hiện được sử dụng làm triển khai mô-đun
zlibtrong 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ữazlib-ngvà cách triển khaizlibđượ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, choices và metavar 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 raValueError. Tương tự,add_argument_group()hoặcadd_mutually_exclusive_group()trên một nhóm loại trừ lẫn nhau giờ đây đều tăngValueErrors. 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à
Constantkể từ Python 3.8 và đã đưa ra cảnh báo không dùng nữa kể từ Python 3.12:BytesEllipsisNameConstantNumStr
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_NameConstantvàvisit_Ellipsisdo người dùng xác định trên các lớp conNodeVisitortùy chỉnh sẽ không còn được gọi khi lớp conNodeVisitorđang truy cập AST. Thay vào đó, hãy xác định phương thứcvisit_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.nConstant.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:
AbstractChildWatcherFastChildWatcherMultiLoopChildWatcherPidfdChildWatcherSafeChildWatcherThreadedChildWatcherAbstractEventLoopPolicy.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ăngRuntimeErrornế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ằngasyncio.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()và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¶
Xóa các lớp
importlib.abckhông được dùng nữa:ResourceReader(dùngTraversableResources)Traversable(dùngTraversable)TraversableResources(dùngTraversableResources)
(Được đóng góp bởi Jason R. Coombs và Hugo van Kemenade trong gh-93963.)
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 raDeprecationWarningkể 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()và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()và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()vàslave_open()không được dùng nữa kể từ Python 3.12. Thay vào đó hãy sử dụngpty.openpty(). (Được đóng góp bởi Nikita Sobolev trong gh-118824.)
sqlite3¶
Xóa
versionvàversion_infokhỏi mô-đunsqlite3; sử dụngsqlite_versionvàsqlite_version_infocho 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-118928 và gh-101693.)
urllib¶
Xóa lớp
Quoterkhỏiurllib.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
URLopenervàFancyURLopenerkhỏiurllib.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ằngurlopen().myopener.retrieve()có thể được thay thế bằngurlretrieve(). 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ớibuild_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.)-
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.)
-
Zz000zz hiện không được dùng nữa và sẽ bị xóa trong Python 3.16; thay vào đó hãy sử dụng
inspect.iscoroutinefunction(). (Được đóng góp bởi Jiahao Li và Kumar Aditya trong gh-122875.)Hệ thống chính sách
asynciokhông được dùng nữa và sẽ bị xóa trong Python 3.16. Cụ thể, các lớp và hàm sau không được dùng nữa:Người dùng nên sử dụng
asyncio.run()hoặcasyncio.Runnervới đối số loop_factory để sử dụng cách triển khai vòng lặp sự kiện mong muốn.Ví dụ: để sử dụng
asyncio.SelectorEventLooptrên Windows:nhập asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Được đóng góp bởi Kumar Aditya trong gh-127949.)
codecs: Hàmcodecs.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ụngopen(). (Được đóng góp bởi Inada Naoki trong gh-133036.)-
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à đặtStructure._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_cachenội bộ không được dùng nữa. Xemctypes.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 khaifunctools.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 chomimetypes.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ăngValueErrortrong 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ọiurllib.request.url2pathname()vàpathname2url(). (Được đóng góp bởi Barney Gale trong gh-125866.)os: Các hàmos.popen()và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ô-đunsubprocess. (Đượ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ụngpathlib.Path.as_uri(). (Được đóng góp bởi Barney Gale trong gh-123599.)pdb: Thuộc tínhpdb.Pdb.curframe_localskhô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àopdb.Pdb.curframe.f_localstrong Python 3.13 và các phiên bản mới hơn. (Được đóng góp bởi Tian Gao trong gh-124369 và gh-125951.)symtable: Không dùngsymtable.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ứctkinter.Variabletrace_variable(),trace_vdelete()vàtrace_vinfo()hiện không được dùng nữa. Thay vào đó hãy sử dụngtrace_add(),trace_remove()và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ư0và[]) ngoại trừ các chuỗi trống, các đối tượng giống byte vàNonetrongparse_qsl()và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__.cachedkhô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__.parentkhô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)
-
Hàm
ctypes.SetPointerType()không có giấy tờ đã không được dùng nữa kể từ Python 3.13.
-
CGIHTTPRequestHandlerlỗ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ờ
--cgicho giao diện dòng lệnh python -m http.server đã không được dùng nữa kể từ Python 3.13.
-
Phương pháp
load_module(): thay vào đó hãy sử dụngexec_module().
-
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ụnggetlocale(),setlocale()vàgetencoding(). (Được đóng góp bởi Hugo van Kemenade trong gh-111187.)
-
PurePath.is_reserved()đã không được dùng nữa kể từ Python 3.13. Sử dụngos.path.isreserved()để phát hiện các đường dẫn dành riêng trên Windows.
-
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.
-
Đối số check_home của
sysconfig.is_python_build()đã không được dùng nữa kể từ Python 3.12.
-
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.CodeType: Việc truy cậpco_lnotabkhô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ộtDeprecationWarningthí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.)
-
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ềnNone(TD = TypedDict("TD", None)) đã không được dùng nữa kể từ Python 3.13. Sử dụngclass TD(TypedDict): passhoặcTD = 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ô-đuntyping, 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:Các phương thức
getmark(),setmark()vàgetmarkers()của các lớpWave_readvàWave_writeđã không còn được dùng nữa kể từ Python 3.13.
-
load_module()đã không được dùng nữa kể từ Python 3.10. Thay vào đó hãy sử dụngexec_module(). (Được đóng góp bởi Jiahao Li trong gh-125746.)
Đ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__.loaderkhô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.
-
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.iscoroutinefunction()không được dùng nữa và sẽ bị xóa trong Python 3.16; thay vào đó hãy sử dụnginspect.iscoroutinefunction(). (Được đóng góp bởi Jiahao Li và Kumar Aditya trong gh-122875.)Hệ thống chính sách
asynciokhông được dùng nữa và sẽ bị xóa trong Python 3.16. Cụ thể, các lớp và hàm sau không được dùng nữa:Người dùng nên sử dụng
asyncio.run()hoặcasyncio.Runnervới loop_factory để sử dụng cách triển khai vòng lặp sự kiện mong muốn.Ví dụ: để sử dụng
asyncio.SelectorEventLooptrên Windows:nhập asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Được đóng góp bởi Kumar Aditya trong gh-127949.)
-
Đảo ngược bit trên các loại boolean,
~Truehoặ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 (-2và-1). Thay vào đó, hãy sử dụngnot 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 sangint(~int(x)).
-
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.
-
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.)
-
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ăngValueErrortrong Python 3.16. (Được đóng góp bởi Hugo van Kemenade trong gh-75223.)
-
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 trongshutilkể từ Python 3.4 và hiện là bí danh củaRuntimeError.
-
Phương thức
Class.get_methodsđã không được dùng nữa kể từ Python 3.14.
sys:Hàm
_enablelegacywindowsfsencoding()đã không được dùng nữa kể từ Python 3.13. Thay vào đó hãy sử dụng biến môi trườngPYTHONLEGACYWINDOWSFSENCODING.
-
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ốvarscủasysconfig.get_paths().
-
Thuộc tính
TarFile.tarfilekhô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.ByteStringđược lên kế hoạch xóa trong Python 3.17.Sử dụng
isinstance(obj, collections.abc.Buffer)để kiểm tra xemobjcó triển khai buffer protocol khi chạy hay không. Để sử dụng trong chú thích loại, hãy sử dụngBufferhoặ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).ByteStringban đầ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ảbytesvàbytearray. 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ủaByteStringchư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ưmemoryviewcũng không bao giờ được hiểu là kiểu con củaByteString(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.)
-
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()và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 xemobjcó triển khai buffer protocol khi chạy hay không. Để sử dụng trong chú thích loại, hãy sử dụngBufferhoặ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).ByteStringban đầ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ảbytesvàbytearray. 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ủaByteStringchư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ưmemoryviewcũng không bao giờ được hiểu là kiểu con củaByteString(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¶
Đang chờ xóa trong Python 3.19¶
Đ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.
-
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.FileTypekhông được dùng nữa.
-
Trình tạo: chữ ký
throw(type, exc, tb)vàathrow(type, exc, tb)không được dùng nữa: thay vào đó hãy sử dụngthrow(exc)và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óaand,else,for,if,in,isvàor. 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__()và__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ủaint.Hỗ trợ phương thức
__float__()trả về một lớp con nghiêm ngặt củafloat: những phương thức này sẽ được yêu cầu để trả về một phiên bản củafloat.Hỗ trợ phương thức
__complex__()trả về một lớp con nghiêm ngặt củacomplex: những phương thức này sẽ được yêu cầu để trả về một phiên bản củacomplex.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.Januaryvàcalendar.Februarykhông được dùng nữa và được thay thế bằngcalendar.JANUARYvàcalendar.FEBRUARY. (Được đóng góp bởi Hoàng tử Roshan trong gh-103636.)codecs: sử dụngopen()thay vìcodecs.open(). (gh-133038)codeobject.co_lnotab: thay vào đó hãy sử dụng phương phápcodeobject.co_lines().-
utcnow(): sử dụngdatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): sử dụngdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: Giá trị số nhiều phải là số nguyên.-
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.
-
giao diện bộ dữ liệu
EntryPoints.Nonengầm định trên các giá trị trả về.
logging: phương thứcwarn()không được dùng nữa kể từ Python 3.3, thay vào đó hãy sử dụngwarning().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ọios.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_constantsvàsre_parse.shutil: Tham số onerror củarmtree()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.SSLContextkhông có đối số giao thức sẽ không được dùng nữa.ssl.SSLContext:set_npn_protocols()và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_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.TLSVersion.TLSv1_1
phương pháp
threading:threading.Condition.notifyAll(): sử dụngnotify_all().threading.Event.isSet(): sử dụngis_set().threading.Thread.isDaemon(),threading.Thread.setDaemon(): sử dụng thuộc tínhthreading.Thread.daemon.threading.Thread.getName(),threading.Thread.setName(): sử dụng thuộc tínhthreading.Thread.name.threading.currentThread(): sử dụngthreading.current_thread().threading.activeCount(): sử dụngthreading.active_count().
Lớp nội bộ
typing._UnionGenericAliaskhông còn được sử dụng để triển khaityping.Unionnữ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àNonetừ trường hợp thử nghiệm.urllib.parsecá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ủaElementkhô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 tralen(elem)hoặcelem is not Nonerõ ràng.sys._clear_type_cache()không được dùng nữa: thay vào đó hãy sử dụngsys._clear_internal_caches().
Thay đổi mã byte CPython¶
Đã thay thế opcode
BINARY_SUBSCRbằng opcodeBINARY_OPbằng opargNB_SUBSCR. (Được đóng góp bởi Irit Katriel trong gh-100239.)Thêm các mã hoạt động
BUILD_INTERPOLATIONvàBUILD_TEMPLATEđể xây dựng các phiên bảnInterpolationvàTemplatemớ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ụngBUILD_MAP. (Được đóng góp bởi Mark Shannon trong gh-122160.)Thay thế opcode
LOAD_ASSERTION_ERRORbằngLOAD_COMMON_CONSTANTvà thêm hỗ trợ tảiNotImplementedError.Thêm các mã hoạt động
LOAD_FAST_BORROWvàLOAD_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ằngopargvào ngăn xếp. Mã hoạt độngRETURN_CONSTbị 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_SPECIALmới. Tạo mã cho câu lệnhwithvàasync withbằng lệnh mới. Đã xóa hướng dẫnBEFORE_WITHvàBEFORE_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_PYcho các lệnh gọi đến hàm Python,CALL_KW_BOUND_METHODcho các lệnh gọi đến các phương thức bị ràng buộc vàCALL_KW_NON_PYcho 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_TRUEvàJUMP_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ãyCOPY 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_CONSTnhư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, đượcsys.monitoringsử 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() và 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.)
Tính năng mới trên C API¶
Thêm
Py_PACK_VERSION()vàPy_PACK_FULL_VERSION(), hai macro mới cho số phiên bản Python đóng gói bit. Điều này rất hữu ích khi so sánh vớiPy_VersionhoặcPY_VERSION_HEX. (Được đóng góp bởi Petr Viktorin trong gh-128629.)Thêm hàm
PyBytes_Join(sep, iterable), tương tự nhưsep.join(iterable)trong Python. (Được đóng góp bởi Victor Stinner trong gh-121645.)Thêm các chức năng để thao tác cấu hình trình thông dịch Python thời gian chạy hiện tại (PEP 741: Python configuration C API):
(Được đóng góp bởi Victor Stinner trong gh-107954.)
Thêm các hàm cấu hình khởi tạo Python (PEP 741: Python configuration C API):
(Được đóng góp bởi Victor Stinner trong gh-107954.)
Thêm chức năng
Py_fopen()để mở file. Điều này hoạt động tương tự như hàm Cfopen()tiêu chuẩn, thay vào đó chấp nhận một đối tượng Python cho tham số path và đặt một ngoại lệ nếu có lỗi. Nên sử dụng hàmPy_fclose()mới tương ứng để đóng tệp. (Được đóng góp bởi Victor Stinner trong gh-127350.)Thêm
Py_HashBuffer()để tính toán và trả về giá trị băm của bộ đệm. (Được đóng góp bởi Antoine Pitrou và Victor Stinner trong gh-122854.)Thêm các hàm trợ giúp
PyImport_ImportModuleAttr()vàPyImport_ImportModuleAttrString()để nhập mô-đun và lấy thuộc tính của mô-đun. (Được đóng góp bởi Victor Stinner trong gh-128911.)Thêm
PyIter_NextItem()để thay thếPyIter_Next(), có giá trị trả về không rõ ràng. (Được đóng góp bởi Irit Katriel và Erlend Aasland trong gh-105201.)Thêm chức năng
PyLong_GetSign()để lấy dấu của đối tượngint. (Được đóng góp bởi Sergey B Kirpichev trong gh-116560.)Thêm
PyLong_IsPositive(),PyLong_IsNegative()vàPyLong_IsZero()để kiểm tra xemPyLongObjectlần lượt là dương, âm hay bằng 0. (Được đóng góp bởi James Roy và Sergey B Kirpichev trong gh-126061.)Thêm các hàm mới để chuyển đổi số C
<stdint.h>sang/từ các đối tượng Pythonint:(Được đóng góp bởi Victor Stinner trong gh-120389.)
Thêm một thao tác nhập và xuất API mới cho các đối tượng
intcủa Python (PEP 757):(Được đóng góp bởi Sergey B Kirpicchev và Victor Stinner trong gh-102471.)
Thêm
PyMonitoring_FireBranchLeftEvent()vàPyMonitoring_FireBranchRightEvent()để tạo các sự kiệnBRANCH_LEFTvàBRANCH_RIGHTtương ứng. (Được đóng góp bởi Mark Shannon trong gh-122548.)Thêm chức năng
PyType_Freeze()để tạo một loại bất biến. (Được đóng góp bởi Victor Stinner trong gh-121654.)Thêm khe
PyType_GetBaseByToken()vàPy_tp_tokenđể nhận dạng siêu lớp dễ dàng hơn, nhằm giải quyết vấn đề kiểm tra loại được đề cập trong PEP 630. (Đã đóng góp trong gh-124153.)Thêm hàm
PyUnicode_Equal()mới để kiểm tra xem hai chuỗi có bằng nhau không. Chức năng này cũng được thêm vào Limited C API. (Được đóng góp bởi Victor Stinner trong gh-124502.)Thêm một
PyUnicodeWriterAPI mới để tạo đối tượngstrPython, với các chức năng sau:(Được đóng góp bởi Victor Stinner trong gh-119182.)
Các định dạng
kvàKtrongPyArg_ParseTuple()và các hàm tương tự hiện sử dụng__index__()nếu có, giống như tất cả các định dạng số nguyên khác. (Được đóng góp bởi Serhiy Storchaka trong gh-112068.)Thêm hỗ trợ cho đơn vị định dạng
pmới trongPy_BuildValue()để tạo đối tượng Pythonbooltừ số nguyên C. (Được đóng góp bởi Pablo Galindo trong bpo-45325.)Thêm
PyUnstable_IsImmortal()để xác định xem một đối tượng có phải là immortal hay không nhằm mục đích gỡ lỗi. (Được đóng góp bởi Peter Bierma trong gh-128509.)Thêm
PyUnstable_Object_EnableDeferredRefcount()để bật tính năng đếm tham chiếu hoãn lại, như được nêu trong PEP 703.Thêm
PyUnstable_Object_IsUniquelyReferenced()để thay thế choPy_REFCNT(op) == 1trên các bản dựng free threaded. (Được đóng góp bởi Peter Bierma trong gh-133140.)Thêm
PyUnstable_Object_IsUniqueReferencedTemporary()để xác định xem một đối tượng có phải là đối tượng tạm thời duy nhất trên ngăn xếp toán hạng của trình thông dịch hay không. Trong một số trường hợp, điều này có thể được sử dụng để thay thế cho việc kiểm tra xemPy_REFCNT()có phải là1đối với các đối tượng Python được truyền dưới dạng đối số cho hàm C API hay không. (Được đóng góp bởi Sam Gross trong gh-133164.)
Thay đổi giới hạn C API¶
Trong phiên bản giới hạn C API 3.14 trở lên,
Py_TYPE()vàPy_REFCNT()hiện được triển khai dưới dạng lệnh gọi hàm không rõ ràng để ẩn chi tiết triển khai. (Được đóng góp bởi Victor Stinner trong gh-120600 và gh-124127.)Xóa các macro
PySequence_Fast_GET_SIZE,PySequence_Fast_GET_ITEMvàPySequence_Fast_ITEMSkhỏi C API giới hạn, vì chúng luôn bị hỏng trong C API giới hạn. (Được đóng góp bởi Victor Stinner trong gh-91417.)
API C đã bị xóa¶
Việc tạo
immutable typesvới các cơ sở có thể thay đổi không được dùng nữa trong Python 3.12 và hiện tăngTypeError. (Đượ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ụngPyDict_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_LIMITvàPyThreadState.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ụngPy_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¶
Macro
Py_HUGE_VALbây giờ là soft deprecated. Thay vào đó hãy sử dụngPy_INFINITY. (Được đóng góp bởi Sergey B Kirpichev trong gh-120026.)Các macro
Py_IS_NAN,Py_IS_INFINITYvàPy_IS_FINITEhiện là soft deprecated. Thay vào đó hãy sử dụngisnan,isinfvàisfinite, có sẵn từmath.hkể từ C99. (Được đóng góp bởi Sergey B Kirpichev trong gh-119613.)Các chuỗi không phải bộ dữ liệu hiện không được dùng làm đối số cho đơn vị định dạng
(items)trongPyArg_ParseTuple()và các hàm argument parsing khác nếu items chứa các đơn vị định dạng lưu trữ borrowed buffer hoặc borrowed reference. (Được đóng góp bởi Serhiy Storchaka trong gh-50333.)Hàm
_PyMonitoring_FireBranchEventhiện không được dùng nữa và nên được thay thế bằng các lệnh gọi tớiPyMonitoring_FireBranchLeftEvent()vàPyMonitoring_FireBranchRightEvent().Hàm
PySequence_In()không có giấy tờ trước đây giờ là soft deprecated. Thay vào đó hãy sử dụngPySequence_Contains(). (Được đóng góp bởi Yuki Kobayashi trong gh-127896.)
Đang chờ xóa trong Python 3.15¶
Zz000zz: Thay vào đó hãy sử dụng
PyImport_ImportModule().PyWeakref_GetObject()vàPyWeakref_GET_OBJECT(): Thay vào đó hãy sử dụngPyWeakref_GetRef(). pythoncapi-compat project có thể được sử dụng để nhậnPyWeakref_GetRef()trên Python 3.12 trở lên.loại
Py_UNICODEvà macroPy_UNICODE_WIDE: Thay vào đó hãy sử dụngwchar_t.PyUnicode_AsDecodedObject(): Thay vào đó hãy sử dụngPyCodec_Decode().PyUnicode_AsDecodedUnicode(): Thay vào đó hãy sử dụngPyCodec_Decode(); Lưu ý rằng một số codec (ví dụ: "base64") có thể trả về loại khácstr, chẳng hạn nhưbytes.PyUnicode_AsEncodedObject(): Thay vào đó hãy sử dụngPyCodec_Encode().PyUnicode_AsEncodedUnicode(): Thay vào đó hãy sử dụngPyCodec_Encode(); Lưu ý rằng một số codec (ví dụ: "base64") có thể trả về loại khácbytes, chẳng hạn nhưstr.Các hàm khởi tạo Python, không được dùng nữa trong Python 3.13:
Py_GetPath(): Thay vào đó hãy sử dụngPyConfig_Get("module_search_paths")(sys.path).Py_GetPrefix(): Thay vào đó hãy sử dụngPyConfig_Get("base_prefix")(sys.base_prefix). Sử dụngPyConfig_Get("prefix")(sys.prefix) nếu cần xử lý virtual environments.Py_GetExecPrefix(): Thay vào đó hãy sử dụngPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix). Sử dụngPyConfig_Get("exec_prefix")(sys.exec_prefix) nếu cần xử lý virtual environments.Py_GetProgramFullPath(): Thay vào đó hãy sử dụngPyConfig_Get("executable")(sys.executable).Py_GetProgramName(): Thay vào đó hãy sử dụngPyConfig_Get("executable")(sys.executable).Py_GetPythonHome(): Thay vào đó hãy sử dụngPyConfig_Get("home")hoặc biến môi trườngPYTHONHOME.
pythoncapi-compat project có thể được sử dụng để nhận
PyConfig_Get()trên Python 3.13 trở lên.Các hàm định cấu hình khởi tạo Python, không được dùng nữa trong Python 3.11:
PySys_SetArgvEx(): Thay vào đó hãy đặtPyConfig.argv.PySys_SetArgv(): Thay vào đó hãy đặtPyConfig.argv.Py_SetProgramName(): Thay vào đó hãy đặtPyConfig.program_name.Py_SetPythonHome(): Thay vào đó hãy đặtPyConfig.home.PySys_ResetWarnOptions(): Thay vào đó hãy xóasys.warnoptionsvàwarnings.filters.
Thay vào đó,
Py_InitializeFromConfig()API nên được sử dụng vớiPyConfig.Biến cấu hình toàn cầu:
Py_DebugFlag: Thay vào đó hãy sử dụngPyConfig.parser_debughoặcPyConfig_Get("parser_debug").Py_VerboseFlag: Thay vào đó hãy sử dụngPyConfig.verbosehoặcPyConfig_Get("verbose").Py_QuietFlag: Thay vào đó hãy sử dụngPyConfig.quiethoặcPyConfig_Get("quiet").Py_InteractiveFlag: Thay vào đó hãy sử dụngPyConfig.interactivehoặcPyConfig_Get("interactive").Py_InspectFlag: Thay vào đó hãy sử dụngPyConfig.inspecthoặcPyConfig_Get("inspect").Py_OptimizeFlag: Thay vào đó hãy sử dụngPyConfig.optimization_levelhoặcPyConfig_Get("optimization_level").Py_NoSiteFlag: Thay vào đó hãy sử dụngPyConfig.site_importhoặcPyConfig_Get("site_import").Py_BytesWarningFlag: Thay vào đó hãy sử dụngPyConfig.bytes_warninghoặcPyConfig_Get("bytes_warning").Py_FrozenFlag: Thay vào đó hãy sử dụngPyConfig.pathconfig_warningshoặcPyConfig_Get("pathconfig_warnings").Py_IgnoreEnvironmentFlag: Thay vào đó hãy sử dụngPyConfig.use_environmenthoặcPyConfig_Get("use_environment").Py_DontWriteBytecodeFlag: Thay vào đó hãy sử dụngPyConfig.write_bytecodehoặcPyConfig_Get("write_bytecode").Py_NoUserSiteDirectory: Thay vào đó hãy sử dụngPyConfig.user_site_directoryhoặcPyConfig_Get("user_site_directory").Py_UnbufferedStdioFlag: Thay vào đó hãy sử dụngPyConfig.buffered_stdiohoặcPyConfig_Get("buffered_stdio").Py_HashRandomizationFlag: Thay vào đó hãy sử dụngPyConfig.use_hash_seedvàPyConfig.hash_seedhoặcPyConfig_Get("hash_seed").Py_IsolatedFlag: Thay vào đó hãy sử dụngPyConfig.isolatedhoặcPyConfig_Get("isolated").Py_LegacyWindowsFSEncodingFlag: Thay vào đó hãy sử dụngPyPreConfig.legacy_windows_fs_encodinghoặcPyConfig_Get("legacy_windows_fs_encoding").Py_LegacyWindowsStdioFlag: Thay vào đó hãy sử dụngPyConfig.legacy_windows_stdiohoặcPyConfig_Get("legacy_windows_stdio").Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: Thay vào đó hãy sử dụngPyConfig.filesystem_encodinghoặcPyConfig_Get("filesystem_encoding").Py_FileSystemDefaultEncodeErrors: Thay vào đó hãy sử dụngPyConfig.filesystem_errorshoặcPyConfig_Get("filesystem_errors").Py_UTF8Mode: Thay vào đó hãy sử dụngPyPreConfig.utf8_modehoặcPyConfig_Get("utf8_mode"). (xemPy_PreInitialize())
Nên sử dụng
Py_InitializeFromConfig()API cùng vớiPyConfigđể đặt các tùy chọn này. HoặcPyConfig_Get()có thể được sử dụng để có được các tùy chọn này khi chạy.
Đ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¶
Các hàm riêng tư sau đây không được dùng nữa và được lên kế hoạch xóa trong Python 3.18:
_PyBytes_Join(): sử dụngPyBytes_Join()._PyDict_GetItemStringWithError(): sử dụngPyDict_GetItemStringRef()._PyDict_Pop(): sử dụngPyDict_Pop()._PyLong_Sign(): sử dụngPyLong_GetSign()._PyLong_FromDigits()và_PyLong_New(): sử dụngPyLongWriter_Create()._PyThreadState_UncheckedGet(): sử dụngPyThreadState_GetUnchecked()._PyUnicode_AsString(): sử dụngPyUnicode_AsUTF8()._PyUnicodeWriter_Init(): thay thế_PyUnicodeWriter_Init(&writer)bằngwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): thay thế_PyUnicodeWriter_Finish(&writer)bằngPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): thay thế_PyUnicodeWriter_Dealloc(&writer)bằngPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): thay thế_PyUnicodeWriter_WriteChar(&writer, ch)bằngPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): thay thế_PyUnicodeWriter_WriteStr(&writer, str)bằngPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): thay thế_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)bằngPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): thay thế_PyUnicodeWriter_WriteASCIIString(&writer, str)bằngPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): thay thế_PyUnicodeWriter_WriteLatin1String(&writer, str)bằngPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (không thay thế)._PyUnicodeWriter_PrepareKind(): (không thay thế)._Py_HashPointer(): sử dụngPy_HashPointer()._Py_fopen_obj(): sử dụngPy_fopen().
pythoncapi-compat project có thể được sử dụng để nhận các hàm công khai mới này trên Python 3.13 trở lên. (Được đóng góp bởi Victor Stinner trong gh-128863.)
Đ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.
Py_TPFLAGS_HAVE_FINALIZE: Không cần thiết kể từ Python 3.8.PyErr_Fetch(): Thay vào đó hãy sử dụngPyErr_GetRaisedException().PyErr_NormalizeException(): Thay vào đó hãy sử dụngPyErr_GetRaisedException().PyErr_Restore(): Thay vào đó hãy sử dụngPyErr_SetRaisedException().PyModule_GetFilename(): Thay vào đó hãy sử dụngPyModule_GetFilenameObject().PyOS_AfterFork(): Thay vào đó hãy sử dụngPyOS_AfterFork_Child().PySlice_GetIndicesEx(): Thay vào đó hãy sử dụngPySlice_Unpack()vàPySlice_AdjustIndices().PyUnicode_READY(): Không cần thiết kể từ Python 3.12PyErr_Display(): Thay vào đó hãy sử dụngPyErr_DisplayException()._PyErr_ChainExceptions(): Thay vào đó hãy sử dụng_PyErr_ChainExceptions1().Thành viên
PyBytesObject.ob_shash: thay vào đó hãy gọiPyObject_Hash().Chủ đề Lưu trữ cục bộ (TLS) API:
PyThread_create_key(): Thay vào đó hãy sử dụngPyThread_tss_alloc().PyThread_delete_key(): Thay vào đó hãy sử dụngPyThread_tss_free().PyThread_set_key_value(): Thay vào đó hãy sử dụngPyThread_tss_set().PyThread_get_key_value(): Thay vào đó hãy sử dụngPyThread_tss_get().PyThread_delete_key_value(): Thay vào đó hãy sử dụngPyThread_tss_delete().PyThread_ReInitTLS(): Không cần thiết kể từ Python 3.7.
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,termiosvàfcntl, 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-127683 và gh-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-emscriptenhiện là nền tảng PEP 11 cấp 3. (Được đóng góp bởi R. Hood Chatham trong gh-127146, gh-127683 và gh-136931.)Giờ đây, liên kết dựa trên
#pragmavớipython3*.libcó 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-safetyconfiguređể 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_FREELISTSvà--without-freelistsconfiguređã bị xóa.Tùy chọn
configuremới--with-tail-call-interpcó 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-debugconfigure. Đ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
stdoutvàstderrsang 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ư gdb và perf 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
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
multiprocessingvàProcessPoolExecutor, thay vì fork.Xem (1) và (2) để biết chi tiết.
Nếu bạn gặp phải lỗi
NameErrors hoặc lỗi tẩy từmultiprocessinghoặcconcurrent.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.partialhiện là bộ mô tả phương thức. Gói nó trongstaticmethod()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_CTYPEtrong 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.UnionTypehiện là bí danh củatyping.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
mimetypesCLI, giờ đây nó thoát với1do lỗi thay vì0và2trê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
\Btrong 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.platformkhông còn chứa số phiên bản chính nữa.
Thay đổi về chú thích (PEP 649 và PEP 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ớiPy_Finalize()và sau đó được sử dụng lại sau lệnh gọi tớiPy_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ớiPy_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
TypeErrornếu đối số ngoại lệ của nó không phải là đối tượngUnicodeError. (Được đóng góp bởi Bénédikt Trần trong gh-127691.)
Trình thông dịch nội bộ sẽ tránh một số sửa đổi về số tham chiếu khi tải các đối tượng lên ngăn xếp toán hạng bằng các tham chiếu borrowing khi có thể. Điều này có thể dẫn đến giá trị số tham chiếu nhỏ hơn so với các phiên bản Python trước đó. Các tiện ích mở rộng C API đã kiểm tra
Py_REFCNT()của1để xác định xem một đối số hàm không được tham chiếu bởi bất kỳ mã nào khác hay không, thay vào đó nên sử dụngPyUnstable_Object_IsUniqueReferencedTemporary()như một sự thay thế an toàn hơn.Các hàm riêng tư được quảng bá lên API C công khai:
_PyBytes_Join():PyBytes_Join()_PyLong_IsNegative():PyLong_IsNegative()_PyLong_IsPositive():PyLong_IsPositive()_PyLong_IsZero():PyLong_IsZero()_PyLong_Sign():PyLong_GetSign()_PyUnicodeWriter_Dealloc():PyUnicodeWriter_Discard()_PyUnicodeWriter_Finish():PyUnicodeWriter_Finish()_PyUnicodeWriter_Init(): sử dụngPyUnicodeWriter_Create()_PyUnicodeWriter_Prepare(): (không thay thế)_PyUnicodeWriter_PrepareKind(): (không thay thế)_PyUnicodeWriter_WriteChar():PyUnicodeWriter_WriteChar()_PyUnicodeWriter_WriteStr():PyUnicodeWriter_WriteStr()_PyUnicodeWriter_WriteSubstring():PyUnicodeWriter_WriteSubstring()_PyUnicode_EQ():PyUnicode_Equal()_PyUnicode_Equal():PyUnicode_Equal()_Py_GetConfig():PyConfig_Get()vàPyConfig_GetInt()_Py_HashBytes():Py_HashBuffer()_Py_fopen_obj():Py_fopen()PyMutex_IsLocked():PyMutex_IsLocked()
Bạn có thể sử dụng pythoncapi-compat project để nhận hầu hết các hàm mới này trên Python 3.13 trở lên.
Những thay đổi đáng chú ý trong 3.14.1¶
Thêm các hàm
PyUnstable_ThreadState_SetStackProtection()vàPyUnstable_ThreadState_ResetStackProtection()để đặt địa chỉ cơ sở bảo vệ ngăn xếp và kích thước bảo vệ ngăn xếp của trạng thái luồng Python. (Được đóng góp bởi Victor Stinner trong gh-139653.)