Có gì mới trong Python 3.13¶
- biên tập viên:
Adam Turner và Thomas Wouters
Bài viết này giải thích các tính năng mới trong Python 3.13, so với 3.12. Python 3.13 được phát hành vào ngày 7 tháng 10 năm 2024. Để biết chi tiết đầy đủ, hãy xem changelog.
Xem thêm
PEP 719 -- Lịch phát hành Python 3.13
Tóm tắt -- Điểm nổi bật của bản phát hành¶
Python 3.13 là bản phát hành ổn định của ngôn ngữ lập trình Python, với sự kết hợp của các 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 interactive interpreter mới, hỗ trợ thử nghiệm để chạy trong free-threaded mode (PEP 703) và Just-In-Time compiler (PEP 744).
Thông báo lỗi tiếp tục được cải thiện, với dấu vết hiện được đánh dấu bằng màu theo mặc định. Nội dung locals() hiện có defined semantics để thay đổi ánh xạ trả về và các tham số loại hiện hỗ trợ các giá trị mặc định.
Các thay đổi về thư viện bao gồm việc loại bỏ các API và mô-đun không được dùng nữa, cũng như các cải tiến thông thường về tính chính xác và thân thiện với người dùng. Một số mô-đun thư viện tiêu chuẩn cũ hiện có been removed sau khi ngừng sử dụng trong Python 3.11 (PEP 594).
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.13 để đượ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:
Một interactive interpreter và improved error messages được cải tiến rất nhiều.
PEP 667: Nội trang
locals()hiện có defined semantics khi thay đổi ánh xạ trả về. Trình gỡ lỗi Python và các công cụ tương tự giờ đây có thể cập nhật các biến cục bộ một cách đáng tin cậy hơn trong phạm vi được tối ưu hóa ngay cả khi thực thi mã đồng thời.PEP 703: CPython 3.13 có hỗ trợ thử nghiệm để chạy khi global interpreter lock bị vô hiệu hóa. Xem Free-threaded CPython để biết thêm chi tiết.
PEP 744: Một JIT compiler cơ bản đã được thêm vào. Tính năng này hiện bị tắt theo mặc định (mặc dù chúng tôi có thể bật tính năng này sau). Những cải tiến về hiệu suất còn khiêm tốn -- chúng tôi hy vọng sẽ cải thiện điều này trong một số bản phát hành tiếp theo.
Hỗ trợ màu sắc trong interactive interpreter mới, cũng như trong đầu ra tracebacks và doctest. Điều này có thể bị vô hiệu hóa thông qua các biến môi trường
PYTHON_COLORSvàNO_COLOR.
Cải tiến mô hình dữ liệu Python:
__static_attributes__lưu trữ tên của các thuộc tính được truy cập thông quaself.Xtrong bất kỳ hàm nào trong nội dung lớp.__firstlineno__ghi lại số dòng đầu tiên của định nghĩa lớp.
Những cải tiến đáng kể trong thư viện tiêu chuẩn:
Thêm một ngoại lệ
PythonFinalizationErrormới, xuất hiện khi một thao tác bị chặn trong finalization.Mô-đun
argparsehiện hỗ trợ các tùy chọn dòng lệnh, đối số vị trí và lệnh phụ không được dùng nữa.Các chức năng mới
base64.z85encode()vàbase64.z85decode()hỗ trợ mã hóa và giải mã Z85 data.Mô-đun
copyhiện có chức năngcopy.replace(), hỗ trợ nhiều loại dựng sẵn và bất kỳ lớp nào xác định phương thức__replace__().Mô-đun
dbm.sqlite3mới hiện là phần phụ trợdbmmặc định.Mô-đun
oscó suite of new functions để làm việc với bộ mô tả tệp thông báo hẹn giờ của Linux.Mô-đun
randomhiện có command-line interface.
Cải tiến bảo mật:
ssl.create_default_context()đặtssl.VERIFY_X509_PARTIAL_CHAINvàssl.VERIFY_X509_STRICTlàm cờ mặc định.
C API cải tiến:
Khe
Py_mod_gilhiện được sử dụng để chỉ ra rằng mô-đun mở rộng hỗ trợ chạy khi GIL bị tắt.Zz000zz đã được thêm vào, cung cấp quyền truy cập vào đồng hồ hệ thống.
PyMutexlà một mutex nhẹ mới chiếm một byte.Có một suite of functions mới để tạo các sự kiện giám sát PEP 669 trong C API.
Tính năng gõ mới:
PEP 696: Loại tham số (
typing.TypeVar,typing.ParamSpecvàtyping.TypeVarTuple) hiện hỗ trợ mặc định.PEP 702: Trình trang trí
warnings.deprecated()mới bổ sung hỗ trợ cho việc đánh dấu các điểm không dùng nữa trong hệ thống loại và trong thời gian chạy.PEP 705:
typing.ReadOnlycó thể được sử dụng để đánh dấu một mục củatyping.TypedDictlà chỉ đọc đối với người kiểm tra loại.PEP 742:
typing.TypeIscung cấp hành vi thu hẹp loại trực quan hơn, thay thế chotyping.TypeGuard.
Hỗ trợ nền tảng:
PEP 730: iOS của Apple hiện là officially supported platform, ở tier 3.
PEP 738: Android hiện là officially supported platform, tại tier 3.
wasm32-wasihiện được hỗ trợ dưới dạng nền tảng tier 2.wasm32-emscriptenkhông còn là nền tảng được hỗ trợ chính thức nữa.
Các thao tác xóa quan trọng:
PEP 594: 19 "pin chết" còn lại (mô-đun stdlib kế thừa) đã bị xóa khỏi thư viện tiêu chuẩn:
aifc,audioop,cgi,cgitb,chunk,crypt,imghdr,mailcap,msilib,nis,nntplib,ossaudiodev,pipes,sndhdr,spwd,sunau,telnetlib,uuvàxdrlib.Xóa công cụ 2to3 và mô-đun
lib2to3(không được dùng trong Python 3.11).Xóa mô-đun
tkinter.tix(không được dùng trong Python 3.6).Loại bỏ chức năng
locale.resetlocale().Xóa không gian tên
typing.iovàtyping.re.Loại bỏ các bộ mô tả
classmethodbị xâu chuỗi.
Thay đổi lịch phát hành:
PEP 602 ("Chu kỳ phát hành hàng năm cho Python") đã được cập nhật để kéo dài thời gian hỗ trợ đầy đủ ('sửa lỗi') cho các bản phát hành mới lên hai năm. Chính sách cập nhật này có nghĩa là:
Python 3.9--3.12 có một năm rưỡi hỗ trợ đầy đủ, sau đó là ba năm rưỡi sửa lỗi bảo mật.
Python 3.13 trở lên được hỗ trợ đầy đủ trong hai năm, sau đó là ba năm sửa lỗi bảo mật.
Tính năng mới¶
Trình thông dịch tương tác tốt hơn¶
Python hiện sử dụng shell interactive mới theo mặc định, dựa trên mã từ PyPy project. Khi người dùng khởi động REPL từ thiết bị đầu cuối tương tác, các tính năng mới sau đây hiện được hỗ trợ:
Chỉnh sửa nhiều dòng với bảo tồn lịch sử.
Hỗ trợ trực tiếp cho các lệnh dành riêng cho REPL như help, exit và quit mà không cần gọi chúng là hàm.
Lời nhắc và truy nguyên với color enabled by default.
Duyệt trợ giúp tương tác bằng F1 với lịch sử lệnh riêng.
Duyệt lịch sử bằng F2 bỏ qua đầu ra cũng như lời nhắc >>> và ....
"Chế độ dán" với F3 giúp dán các khối mã lớn hơn dễ dàng hơn (nhấn F3 lần nữa để quay lại lời nhắc thông thường).
Để tắt shell tương tác mới, hãy đặt biến môi trường PYTHON_BASIC_REPL. Để biết thêm về chế độ tương tác, hãy xem Chế độ tương tác.
(Được đóng góp bởi Pablo Galindo Salgado, Łukasz Langa và Lysandros Nikolaou trong gh-111201 dựa trên mã từ dự án PyPy. Hỗ trợ Windows do Dino Viehland và Anthony Shaw đóng góp.)
Thông báo lỗi được cải thiện¶
Trình thông dịch hiện sử dụng màu theo mặc định khi hiển thị dấu vết trong thiết bị đầu cuối. Tính năng này can be controlled thông qua biến môi trường
PYTHON_COLORSmới cũng như các biến môi trườngNO_COLORvàFORCE_COLORchuẩn. (Được đóng góp bởi Pablo Galindo Salgado trong gh-112730.)Một lỗi phổ biến là viết tập lệnh có cùng tên với mô-đun thư viện tiêu chuẩn. Khi điều này dẫn đến lỗi, giờ đây chúng tôi sẽ hiển thị thông báo lỗi hữu ích hơn:
$ python ngẫu nhiên Traceback (cuộc gọi gần đây nhất): Tệp "/home/me/random.py", dòng 1, trong <module> nhập khẩu ngẫu nhiên Tệp "/home/me/random.py", dòng 3, trong <module> print(random.randint(5)) ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ AttributionError: mô-đun 'ngẫu nhiên' không có thuộc tính 'randint' (xem xét đổi tên '/home/me/random.py' vì nó có cùng tên với mô-đun thư viện tiêu chuẩn có tên 'ngẫu nhiên' và ngăn nhập mô-đun thư viện tiêu chuẩn đó)
Tương tự, nếu tập lệnh có cùng tên với mô-đun bên thứ ba mà nó cố gắng nhập và điều này dẫn đến lỗi, chúng tôi cũng hiển thị thông báo lỗi hữu ích hơn:
$ trăn numpy.py Traceback (cuộc gọi gần đây nhất): Tệp "/home/me/numpy.py", dòng 1, trong <module> nhập numpy dưới dạng np Tệp "/home/me/numpy.py", dòng 3, trong <module> np.array([1, 2, 3]) ^^ ^^ ^^ ^^ AttributionError: mô-đun 'numpy' không có thuộc tính 'mảng' (hãy cân nhắc đổi tên '/home/me/numpy.py' nếu nó có cùng tên với thư viện bạn định nhập)
(Được đóng góp bởi Shantanu Jain trong gh-95754.)
Thông báo lỗi hiện cố gắng đề xuất đối số từ khóa chính xác khi đối số từ khóa không chính xác được chuyển đến một hàm.
>>> "Thông báo lỗi tốt hơn!".split(max_split=1) Traceback (cuộc gọi gần đây nhất): Tệp "<python-input-0>", dòng 1, trong <module> "Thông báo lỗi tốt hơn!".split(max_split=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^^ ^^ ^^ ^^ ^^ ^^ TypeError: Split() nhận được đối số từ khóa không mong muốn 'max_split'. Ý bạn là 'maxsplit'?
(Được đóng góp bởi Pablo Galindo Salgado và Shantanu Jain trong gh-107944.)
CPython có luồng miễn phí¶
CPython hiện có hỗ trợ thử nghiệm để chạy ở chế độ luồng tự do, với global interpreter lock (GIL) bị tắt. Đây là tính năng thử nghiệm và do đó không được bật theo mặc định. Chế độ luồng tự do yêu cầu một tệp thực thi khác, thường được gọi là python3.13t hoặc python3.13t.exe. Các tệp nhị phân dựng sẵn được đánh dấu là free-threaded có thể được cài đặt như một phần của trình cài đặt Windows và macOS chính thức hoặc CPython có thể được tạo từ nguồn với tùy chọn --disable-gil.
Thực thi luồng tự do cho phép tận dụng tối đa sức mạnh xử lý sẵn có bằng cách chạy các luồng song song trên các lõi CPU có sẵn. Mặc dù không phải tất cả phần mềm đều tự động được hưởng lợi từ điều này, nhưng các chương trình được thiết kế theo luồng sẽ chạy nhanh hơn trên phần cứng đa lõi. The free-threaded mode is experimental và công việc đang được tiến hành để cải thiện nó: dự kiến sẽ có một số lỗi và ảnh hưởng đáng kể đến hiệu suất đơn luồng. Các bản dựng CPython luồng tự do hỗ trợ tùy chọn chạy với GIL được bật trong thời gian chạy bằng cách sử dụng biến môi trường PYTHON_GIL hoặc tùy chọn dòng lệnh -X gil=1.
Để kiểm tra xem trình thông dịch hiện tại có hỗ trợ phân luồng tự do hay không, python -VV và sys.version chứa "bản dựng phân luồng tự do thử nghiệm". Chức năng sys._is_gil_enabled() mới có thể được sử dụng để kiểm tra xem GIL có thực sự bị vô hiệu hóa trong quá trình chạy hay không.
Các mô-đun mở rộng C-API cần được xây dựng riêng cho bản dựng luồng tự do. Các tiện ích mở rộng hỗ trợ chạy khi GIL bị vô hiệu hóa nên sử dụng khe cắm Py_mod_gil. Các tiện ích mở rộng sử dụng init một pha nên sử dụng PyUnstable_Module_SetGIL() để cho biết liệu chúng có hỗ trợ chạy khi GIL bị tắt hay không. Việc nhập tiện ích mở rộng C không sử dụng các cơ chế này sẽ khiến GIL được bật, trừ khi GIL bị vô hiệu hóa rõ ràng bằng biến môi trường PYTHON_GIL hoặc tùy chọn -X gil=0. Cần có pip 24.1 hoặc mới hơn để cài đặt các gói có phần mở rộng C trong bản dựng luồng miễn phí.
Công việc này được thực hiện nhờ vào nhiều cá nhân và tổ chức, bao gồm cả cộng đồng lớn những người đóng góp cho Python và các dự án của bên thứ ba để thử nghiệm và kích hoạt hỗ trợ phân luồng tự do. Những người đóng góp đáng chú ý bao gồm: Sam Gross, Ken Jin, Donghee Na, Itamar Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou và nhiều người khác. Nhiều người trong số những người đóng góp này được Meta tuyển dụng, nơi đã cung cấp các nguồn lực kỹ thuật quan trọng để hỗ trợ dự án này.
Xem thêm
PEP 703 "Tạo tùy chọn khóa phiên dịch toàn cầu trong CPython" chứa cơ sở lý luận và thông tin xung quanh công việc này.
Porting Extension Modules to Support Free-Threading: Hướng dẫn chuyển do cộng đồng duy trì dành cho các tác giả tiện ích mở rộng.
Trình biên dịch đúng lúc (JIT) thử nghiệm¶
Khi CPython được định cấu hình và xây dựng bằng tùy chọn --enable-experimental-jit, trình biên dịch đúng lúc (JIT) sẽ được thêm vào để có thể tăng tốc một số chương trình Python. Trên Windows, sử dụng PCbuild/build.bat --experimental-jit để bật JIT hoặc --experimental-jit-interpreter để bật trình thông dịch Cấp 2. Xây dựng yêu cầu và thông tin hỗ trợ thêm are contained at Tools/jit/README.md.
Tùy chọn --enable-experimental-jit nhận các giá trị (tùy chọn) này, mặc định là yes nếu --enable-experimental-jit hiện diện mà không có giá trị tùy chọn.
no: Vô hiệu hóa toàn bộ đường dẫn Cấp 2 và JIT.yes: Kích hoạt JIT. Để tắt JIT khi chạy, hãy chuyển biến môi trườngPYTHON_JIT=0.yes-off: Tạo JIT nhưng tắt nó theo mặc định. Để bật JIT khi chạy, hãy chuyển biến môi trườngPYTHON_JIT=1.interpreter: Bật trình thông dịch Cấp 2 nhưng tắt JIT. Trình thông dịch có thể bị tắt bằng cách chạy vớiPYTHON_JIT=0.
Kiến trúc bên trong đại khái như sau:
Chúng tôi bắt đầu với Tier 1 bytecode chuyên dụng. Xem What's new in 3.11 để biết chi tiết.
Khi mã byte Cấp 1 đủ nóng, nó sẽ được dịch sang một biểu diễn trung gian thuần túy bên trong (IR) mới, được gọi là Tier 2 IR và đôi khi được gọi là micro-ops ("uops").
IR Cấp 2 sử dụng cùng một máy ảo dựa trên ngăn xếp như Cấp 1, nhưng định dạng lệnh phù hợp hơn để dịch sang mã máy.
Chúng tôi có một số thẻ tối ưu hóa cho IR Cấp 2, được áp dụng trước khi nó được diễn giải hoặc dịch sang mã máy.
Có trình thông dịch Cấp 2 nhưng chủ yếu nhằm mục đích gỡ lỗi các giai đoạn trước của quy trình tối ưu hóa. Trình thông dịch Cấp 2 có thể được bật bằng cách định cấu hình Python với
--enable-experimental-jit=interpreter.Khi JIT được bật, IR Cấp 2 được tối ưu hóa sẽ được dịch sang mã máy, sau đó được thực thi.
Quá trình dịch mã máy sử dụng kỹ thuật gọi là copy-and-patch. Nó không có phần phụ thuộc thời gian chạy, nhưng có phần phụ thuộc thời gian xây dựng mới trên LLVM.
Xem thêm
(JIT của Brandt Bucher, lấy cảm hứng từ bài báo của Haoran Xu và Fredrik Kjolstad. IR cấp 2 của Mark Shannon và Guido van Rossum. Trình tối ưu hóa cấp 2 của Ken Jin.)
Ngữ nghĩa đột biến được xác định cho locals()¶
Về mặt lịch sử, kết quả mong đợi của việc thay đổi giá trị trả về của locals() đã được giao cho việc triển khai Python riêng lẻ xác định. Bắt đầu từ Python 3.13, PEP 667 chuẩn hóa hành vi lịch sử của CPython cho hầu hết các phạm vi thực thi mã, nhưng thay đổi optimized scopes (hàm, trình tạo, coroutine, hiểu và biểu thức trình tạo) để trả về rõ ràng các ảnh chụp nhanh độc lập của các biến cục bộ hiện được chỉ định, bao gồm các biến không cục bộ được tham chiếu cục bộ được ghi lại trong các phần đóng.
Sự thay đổi này đối với ngữ nghĩa của locals() trong phạm vi được tối ưu hóa cũng ảnh hưởng đến hành vi mặc định của các hàm thực thi mã nhắm mục tiêu ngầm đến locals() nếu không cung cấp không gian tên rõ ràng (chẳng hạn như exec() và eval()). Trong các phiên bản trước, việc có thể truy cập các thay đổi hay không bằng cách gọi locals() sau khi gọi hàm thực thi mã phụ thuộc vào việc triển khai. Cụ thể là trong CPython, mã như vậy thường hoạt động như mong muốn, nhưng đôi khi có thể không hoạt động trong phạm vi được tối ưu hóa dựa trên mã khác (bao gồm trình gỡ lỗi và công cụ theo dõi thực thi mã) có khả năng đặt lại ảnh chụp nhanh được chia sẻ trong phạm vi đó. Giờ đây, mã sẽ luôn chạy dựa trên ảnh chụp nhanh độc lập của các biến cục bộ trong phạm vi được tối ưu hóa và do đó các thay đổi sẽ không bao giờ hiển thị trong các lệnh gọi tiếp theo tới locals(). Để truy cập những thay đổi được thực hiện trong những trường hợp này, bây giờ một tham chiếu không gian tên rõ ràng phải được chuyển đến hàm liên quan. Ngoài ra, có thể hợp lý khi cập nhật mã bị ảnh hưởng để sử dụng cách thực thi mã cấp cao hơn API để trả về không gian tên thực thi mã kết quả (ví dụ: runpy.run_path() khi thực thi các tệp Python từ đĩa).
Để đảm bảo các trình gỡ lỗi và các công cụ tương tự có thể cập nhật các biến cục bộ một cách đáng tin cậy trong các phạm vi bị ảnh hưởng bởi thay đổi này, FrameType.f_locals hiện trả về một proxy ghi cho các biến không cục bộ được tham chiếu cục bộ và cục bộ của khung trong các phạm vi này, thay vì trả về một phiên bản dict được chia sẻ được cập nhật không nhất quán với ngữ nghĩa thời gian chạy không xác định.
Xem PEP 667 để biết thêm chi tiết, bao gồm các thay đổi và ngừng sử dụng C API có liên quan. Ghi chú chuyển đổi cũng được cung cấp bên dưới cho Python APIs và C APIs bị ảnh hưởng.
(PEP và cách triển khai do Mark Shannon và Tian Gao đóng góp trong gh-74929. Cập nhật tài liệu do Guido van Rossum và Alyssa Coghlan cung cấp.)
Hỗ trợ cho nền tảng di động¶
PEP 730: iOS hiện là nền tảng được hỗ trợ PEP 11, với mục tiêu arm64-apple-ios và arm64-apple-ios-simulator ở cấp 3 (các thiết bị iPhone và iPad được phát hành sau năm 2013 và trình giả lập Xcode iOS lần lượt chạy trên phần cứng silicon của Apple). x86_64-apple-ios-simulator (trình mô phỏng iOS Xcode chạy trên phần cứng x86_64 cũ hơn) không phải là nền tảng được hỗ trợ cấp 3 nhưng sẽ có hỗ trợ nỗ lực tốt nhất. (PEP được viết và triển khai bởi Russell Keith-Magee trong gh-114099.)
PEP 738: Android hiện là nền tảng được hỗ trợ PEP 11, với các mục tiêu aarch64-linux-android và x86_64-linux-android ở cấp 3. Các mục tiêu 32-bit arm-linux-androideabi và i686-linux-android không phải là nền tảng được hỗ trợ cấp 3 nhưng sẽ có hỗ trợ nỗ lực tốt nhất. (PEP được viết và triển khai bởi Malcolm Smith trong gh-116622.)
Những thay đổi ngôn ngữ khác¶
Trình biên dịch hiện loại bỏ khoảng trắng hàng đầu phổ biến khỏi mọi dòng trong chuỗi tài liệu. Điều này làm giảm kích thước của bytecode cache (chẳng hạn như tệp
.pyc), với mức giảm kích thước tệp khoảng 5%, ví dụ như trongsqlalchemy.orm.sessiontừ SQLAlchemy 2.0. Thay đổi này ảnh hưởng đến các công cụ sử dụng chuỗi tài liệu, chẳng hạn nhưdoctest.>>> chống thư rác(): ... """ ... Đây là một chuỗi tài liệu với ... khoảng trắng hàng đầu. ... ... Nó thậm chí còn có nhiều đoạn văn! ... """ ... >>> thư rác.__doc__ '\nĐây là một chuỗi tài liệu có\n khoảng trắng ở đầu.\n\nNó thậm chí còn có nhiều đoạn văn!\n'
(Được đóng góp bởi Inada Naoki trong gh-81283.)
Annotation scopes trong phạm vi lớp hiện có thể chứa lambda và phần hiểu. Những hiểu biết nằm trong phạm vi lớp không được đưa vào phạm vi chính của chúng.
lớp C[T]: gõ Bí danh = lambda: T
(Được đóng góp bởi Jelle Zijlstra trong gh-109118 và gh-118160.)
Future statements không còn được kích hoạt bởi quá trình nhập tương đối của mô-đun
__future__, nghĩa là các câu lệnh có dạngfrom .__future__ import ...giờ đây chỉ đơn giản là nhập tương đối tiêu chuẩn, không có tính năng đặc biệt nào được kích hoạt. (Được đóng góp bởi Jeremiah Gabriel Pascual trong gh-118216.)Khai báo
globalhiện được phép trong khốiexceptkhi toàn cục đó được sử dụng trong khốielse. Trước đây điều này đã gây ra lỗiSyntaxError. (Được đóng góp bởi Irit Katriel trong gh-111123.)Thêm
PYTHON_FROZEN_MODULES, một biến môi trường mới xác định xem các mô-đun cố định có bị máy nhập bỏ qua hay không, tương đương với tùy chọn dòng lệnh-X frozen_modules. (Được đóng góp bởi Yilei Yang trong gh-111374.)Thêm support for the perf profiler hoạt động mà không cần frame pointers thông qua biến môi trường mới
PYTHON_PERF_JIT_SUPPORTvà tùy chọn dòng lệnh-X perf_jit. (Được đóng góp bởi Pablo Galindo trong gh-118518.)Vị trí của tệp
.python_historycó thể được thay đổi thông qua biến môi trườngPYTHON_HISTORYmới. (Được đóng góp bởi Levi Sabah, Zuckery Spytz và Hugo van Kemenade trong gh-73965.)Các lớp có thuộc tính
__static_attributes__mới. Điều này được trình biên dịch điền vào một bộ tên thuộc tính của lớp được gán thông quaself.<name>từ bất kỳ hàm nào trong phần thân của nó. (Được đóng góp bởi Irit Katriel trong gh-115775.)Trình biên dịch bây giờ tạo thuộc tính
__firstlineno__trên các lớp với số dòng của dòng đầu tiên của định nghĩa lớp. (Được đóng góp bởi Serhiy Storchaka trong gh-118465.)Nội trang
exec()vàeval()hiện chấp nhận các đối số globals và locals làm từ khóa. (Được đóng góp bởi Raphael Gaschignard trong gh-105879)Nội trang
compile()hiện chấp nhận một cờ mới,ast.PyCF_OPTIMIZED_AST, tương tự nhưast.PyCF_ONLY_ASTngoại trừ việc AST trả về được tối ưu hóa theo giá trị của đối số optimize. (Được đóng góp bởi Irit Katriel trong gh-108113).Thêm thuộc tính
__name__trên đối tượngproperty. (Được đóng góp bởi Eugene Toder trong gh-101860.)Thêm
PythonFinalizationError, một ngoại lệ mới bắt nguồn từRuntimeErrorvà được sử dụng để báo hiệu khi các hoạt động bị chặn trong finalization. Các lệnh gọi sau đây hiện tăngPythonFinalizationError, thay vìRuntimeError:(Được đóng góp bởi Victor Stinner trong gh-114570.)
Cho phép đối số count của
str.replace()làm từ khóa. (Được đóng góp bởi Hugo van Kemenade trong gh-106487.)Hiện tại, nhiều hàm phát ra cảnh báo nếu một giá trị boolean được truyền dưới dạng đối số mô tả tệp. Điều này có thể giúp phát hiện một số lỗi sớm hơn. (Được đóng góp bởi Serhiy Storchaka trong gh-82626.)
Đã thêm thuộc tính
namevàmodecho các đối tượng giống như tệp được nén và lưu trữ trong các mô-đunbz2,lzma,tarfilevàzipfile. (Được đóng góp bởi Serhiy Storchaka trong gh-115961.)
Mô-đun mới¶
dbm.sqlite3: Phần phụ trợ SQLite chodbm. (Được đóng góp bởi Raymond Hettinger và Erlend E. Aasland trong gh-100414.)
Mô-đun cải tiến¶
phân tích cú pháp¶
Thêm tham số deprecated vào các phương thức
add_argument()vàadd_parser()để bật các tùy chọn dòng lệnh, đối số vị trí và lệnh phụ không được dùng nữa. (Được đóng góp bởi Serhiy Storchaka trong gh-83648.)
mảng¶
Thêm mã loại
'w'(Py_UCS4) cho các ký tự Unicode. Nó nên được sử dụng thay vì mã loại'u'không được dùng nữa. (Được đóng góp bởi Inada Naoki trong gh-80480.)Đăng ký
array.arraylàmMutableSequencebằng cách triển khai phương thứcclear(). (Được đóng góp bởi Mike Zimin trong gh-114894.)
ast¶
Hàm tạo của các loại nút trong mô-đun
astgiờ đây chặt chẽ hơn trong các đối số mà chúng chấp nhận, với hành vi trực quan hơn khi bỏ qua các đối số.Nếu trường tùy chọn trên nút AST không được đưa vào làm đối số khi xây dựng một phiên bản, thì trường đó bây giờ sẽ được đặt thành
None. Tương tự, nếu một trường danh sách bị bỏ qua, trường đó giờ đây sẽ được đặt thành danh sách trống và nếu trườngexpr_contextbị bỏ qua, trường đó sẽ mặc định làLoad(). (Trước đây, trong mọi trường hợp, thuộc tính sẽ bị thiếu trên phiên bản nút AST mới được xây dựng.)Trong tất cả các trường hợp khác, khi một đối số bắt buộc bị bỏ qua, hàm tạo nút sẽ phát ra
DeprecationWarning. Điều này sẽ đưa ra một ngoại lệ trong Python 3.15. Tương tự, việc chuyển đối số từ khóa tới hàm tạo không ánh xạ tới trường trên nút AST hiện không được dùng nữa và sẽ đưa ra một ngoại lệ trong Python 3.15.Những thay đổi này không áp dụng cho các lớp con do người dùng định nghĩa của
ast.ASTtrừ khi lớp đó chọn tham gia hành vi mới bằng cách xác định ánh xạAST._field_types.(Được đóng góp bởi Jelle Zijlstra trong gh-105858, gh-117486 và gh-118851.)
ast.parse()hiện chấp nhận một đối số tùy chọn optimize được chuyển chocompile(). Điều này giúp có thể đạt được AST được tối ưu hóa. (Được đóng góp bởi Irit Katriel trong gh-108113.)
asyncio¶
asyncio.as_completed()hiện trả về một đối tượng vừa là asynchronous iterator vừa là iterator đơn giản của awaitables. Các sản phẩm có thể chờ đợi do quá trình lặp lại không đồng bộ mang lại bao gồm nhiệm vụ ban đầu hoặc các đối tượng trong tương lai đã được chuyển vào, giúp dễ dàng liên kết kết quả với các nhiệm vụ đang được hoàn thành. (Được đóng góp bởi Justin Arthur trong gh-77714.)asyncio.loop.create_unix_server()bây giờ sẽ tự động xóa ổ cắm Unix khi máy chủ đóng. (Được đóng góp bởi Pierre Ossman trong gh-111246.)DatagramTransport.sendto()bây giờ sẽ gửi các gói dữ liệu có độ dài bằng 0 nếu được gọi với đối tượng byte trống. Kiểm soát luồng truyền tải bây giờ cũng tính đến tiêu đề datagram khi tính toán kích thước bộ đệm. (Được đóng góp bởi Jamie Phan trong gh-115199.)Thêm
Queue.shutdownvàQueueShutDownđể quản lý việc chấm dứt hàng đợi. (Được đóng góp bởi Laurie Opperman và Yves Duprat trong gh-104228.)Thêm các phương thức
Server.close_clients()vàServer.abort_clients()để đóng máy chủ asyncio một cách mạnh mẽ hơn. (Được đóng góp bởi Pierre Ossman trong gh-113538.)Chấp nhận một bộ dấu phân cách trong
StreamReader.readuntil(), dừng lại khi gặp bất kỳ dấu phân cách nào trong số chúng. (Được đóng góp bởi Bruce Merry trong gh-81322.)Cải thiện hoạt động của
TaskGroupkhi quá trình hủy bên ngoài va chạm với quá trình hủy bên trong. Ví dụ: khi hai nhóm nhiệm vụ được lồng nhau và cả hai đều gặp phải một ngoại lệ trong một nhiệm vụ con cùng một lúc, có thể nhóm nhiệm vụ bên ngoài sẽ bị treo do tính năng hủy bên trong của nó đã bị nhóm nhiệm vụ bên trong nuốt chửng.Trong trường hợp một nhóm nhiệm vụ bị hủy bên ngoài và cũng phải đưa ra
ExceptionGroup, giờ đây nó sẽ gọi phương thứccancel()của nhiệm vụ mẹ. Điều này đảm bảo rằngCancelledErrorsẽ được nâng lên ởawaittiếp theo, do đó việc hủy không bị mất.Lợi ích bổ sung của những thay đổi này là các nhóm nhiệm vụ hiện giữ nguyên số lần hủy (
cancelling()).Để xử lý một số trường hợp góc,
uncancel()hiện có thể đặt lại cờ_must_cancelkhông có giấy tờ khi số lần hủy đạt đến 0.(Lấy cảm hứng từ một vấn đề được báo cáo bởi Arthur Tacca trên gh-116720.)
Khi
TaskGroup.create_task()được gọi trên mộtTaskGroupkhông hoạt động, coroutine đã cho sẽ bị đóng (điều này ngăn không choRuntimeWarningvề coroutine đã cho không bao giờ được chờ đợi). (Được đóng góp bởi Arthur Tacca và Jason Zhang trong gh-115957.)Hàm và phương thức có tên
create_taskđã nhận được một đối số**kwargsmới được chuyển tới hàm tạo tác vụ. Thay đổi này vô tình được thêm vào trong 3.13.3 và phá vỡ hợp đồng API dành cho các nhà máy nhiệm vụ tùy chỉnh. Một số nhà máy nhiệm vụ của bên thứ ba đã triển khai giải pháp cho việc này. Trong phiên bản 3.13.4 trở về sau, hợp đồng nhà máy cũ được vinh danh một lần nữa (cho đến phiên bản 3.14). Để duy trì các giải pháp thay thế, đối số**kwargsbổ sung vẫn cho phép chuyển các đối số từ khóa bổ sung tớiTaskvà tới các nhà máy tác vụ tùy chỉnh.Đ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ơ sở64¶
Thêm các hàm
z85encode()vàz85decode()để mã hóabytesthành Z85 data và giải mã dữ liệu được mã hóa Z85 thànhbytes. (Được đóng góp bởi Matan Perelman trong gh-75299.)
biên soạn tất cả¶
Số luồng và quy trình công việc mặc định hiện được chọn bằng
os.process_cpu_count()thay vìos.cpu_count(). (Được đóng góp bởi Victor Stinner trong gh-109649.)
đồng thời.futures¶
Số luồng và quy trình công việc mặc định hiện được chọn bằng
os.process_cpu_count()thay vìos.cpu_count(). (Được đóng góp bởi Victor Stinner trong gh-109649.)
trình phân tích cú pháp cấu hình¶
ConfigParserhiện đã hỗ trợ các phần chưa được đặt tên, cho phép tạo các cặp khóa-giá trị cấp cao nhất. Điều này có thể được kích hoạt bằng tham số allow_unnamed_section mới. (Được đóng góp bởi Pedro Sousa Lacerda trong gh-66449.)
sao chép¶
Chức năng
replace()mới vàreplace protocolgiúp việc tạo các bản sao sửa đổi của đối tượng trở nên đơn giản hơn nhiều. Điều này đặc biệt hữu ích khi làm việc với các đối tượng bất biến. Các loại sau hỗ trợ chức năngreplace()và triển khai giao thức thay thế:Bất kỳ lớp nào do người dùng định nghĩa cũng có thể hỗ trợ
copy.replace()bằng cách xác định phương thức__replace__(). (Được đóng góp bởi Serhiy Storchaka trong gh-108751.)
ctypes¶
Do quá trình tái cấu trúc nội bộ cần thiết, việc khởi tạo siêu dữ liệu nội bộ hiện diễn ra trong
__init__thay vì trong__new__. Điều này ảnh hưởng đến các dự án phân lớp các siêu dữ liệu nội bộ này để cung cấp khả năng khởi tạo tùy chỉnh. Nói chung:Logic tùy chỉnh được thực hiện trong
__new__sau khi gọisuper().__new__sẽ được chuyển sang__init__.Để tạo một lớp, hãy gọi siêu dữ liệu, không chỉ phương thức
__new__của siêu dữ liệu.
Xem gh-124520 để thảo luận và liên kết đến những thay đổi trong một số dự án bị ảnh hưởng.
Các đối tượng
ctypes.Structurecó thuộc tính_align_mới cho phép căn chỉnh cấu trúc được đóng gói đến/từ bộ nhớ được chỉ định rõ ràng. (Được đóng góp bởi Matt Sanderson trong gh-112433)
dbm¶
Thêm
dbm.sqlite3, một mô-đun mới triển khai phần phụ trợ SQLite và đặt nó làm phần phụ trợdbmmặc định. (Được đóng góp bởi Raymond Hettinger và Erlend E. Aasland trong gh-100414.)Cho phép xóa tất cả các mục khỏi cơ sở dữ liệu thông qua các phương thức
clear()mới của đối tượng cơ sở dữ liệu GDBM và NDBM. (Được đóng góp bởi Donghee Na trong gh-107122.)
dis¶
Thay đổi đầu ra của các chức năng mô-đun
disđể hiển thị nhãn logic cho mục tiêu nhảy và trình xử lý ngoại lệ, thay vì hiệu số. Các giá trị bù có thể được thêm bằng tùy chọn dòng lệnh-Omới hoặc đối số show_offsets. (Được đóng góp bởi Irit Katriel trong gh-112137.)get_instructions()không còn thể hiện các mục trong bộ đệm dưới dạng hướng dẫn riêng biệt nữa. Thay vào đó, nó trả về chúng như một phần củaInstruction, trong trường cache_info mới. Đối số show_caches choget_instructions()không được dùng nữa và không còn hiệu lực nữa. (Được đóng góp bởi Irit Katriel trong gh-112962.)
doc nhất¶
Đầu ra
doctesthiện được tô màu theo mặc định. Điều này có thể được kiểm soát thông qua biến môi trườngPYTHON_COLORSmới cũng như các biến môi trườngNO_COLORvàFORCE_COLORchuẩn. Xem thêm Kiểm soát màu sắc. (Được đóng góp bởi Hugo van Kemenade trong gh-117225.)Phương pháp
DocTestRunner.run()hiện đếm số lượng bài kiểm tra bị bỏ qua. Thêm thuộc tínhDocTestRunner.skipsvàTestResults.skipped. (Được đóng góp bởi Victor Stinner trong gh-108794.)
email¶
Các tiêu đề có dòng mới được nhúng hiện được trích dẫn trên đầu ra. Giờ đây,
generatorsẽ từ chối tuần tự hóa (ghi) các tiêu đề được gấp hoặc phân cách không đúng cách, do đó chúng sẽ được phân tích cú pháp thành nhiều tiêu đề hoặc nối với dữ liệu liền kề. Nếu bạn cần tắt tính năng an toàn này thì hãy đặtverify_generated_headers. (Được đóng góp bởi Bas Bloemsaat và Petr Viktorin trong gh-121650.)getaddresses()vàparseaddr()hiện trả về các cặp('', '')trong nhiều trường hợp gặp phải địa chỉ email không hợp lệ thay vì các giá trị có thể không chính xác. Hai hàm này có tham số strict tùy chọn mới (Truemặc định). Để có hành vi cũ (chấp nhận đầu vào không đúng định dạng), hãy sử dụngstrict=False.getattr(email.utils, 'supports_strict_parsing', False)có thể được sử dụng để kiểm tra xem tham số strict có sẵn không. (Được đóng góp bởi Thomas Dwyer và Victor Stinner cho gh-102988 để cải thiện bản sửa lỗi CVE 2023-27043.)
liệt kê¶
phân số¶
Các đối tượng
Fractionhiện hỗ trợ các quy tắc format specification mini-language tiêu chuẩn để điền, căn chỉnh, xử lý ký hiệu, chiều rộng tối thiểu và nhóm. (Được đóng góp bởi Mark Dickinson trong gh-111320.)
quả địa cầu¶
Thêm
translate(), một hàm để chuyển đổi đặc tả đường dẫn có ký tự đại diện kiểu shell thành biểu thức chính quy. (Được đóng góp bởi Barney Gale trong gh-72904.)
nhập khẩu¶
Các hàm sau trong
importlib.resourceshiện cho phép truy cập vào một thư mục (hoặc cây) tài nguyên, sử dụng nhiều đối số vị trí (các đối số encoding và errors trong các hàm đọc văn bản hiện chỉ có từ khóa):Các chức năng này không còn được dùng nữa và không được lên lịch để xóa. (Được đóng góp bởi Petr Viktorin trong gh-116608.)
contents()vẫn không được dùng nữa để thay thế bằngTraversableAPI đầy đủ tính năng. Tuy nhiên hiện tại chưa có kế hoạch loại bỏ nó. (Được đóng góp bởi Petr Viktorin trong gh-116608.)
io¶
Trình hoàn thiện
IOBasehiện ghi lại bất kỳ lỗi nào do phương phápclose()phát sinh vớisys.unraisablehook. Trước đây, các lỗi được âm thầm bỏ qua theo mặc định và chỉ đăng nhập vào Python Development Mode hoặc khi sử dụng Python debug build. (Được đóng góp bởi Victor Stinner trong gh-62948.)
váy ipad¶
Thêm thuộc tính
IPv4Address.ipv6_mapped, thuộc tính này trả về địa chỉ IPv6 được ánh xạ IPv4. (Được đóng góp bởi Charles Machalow trong gh-109466.)Khắc phục hành vi
is_globalvàis_privatetrongIPv4Address,IPv6Address,IPv4NetworkvàIPv6Network. (Được đóng góp bởi Jakub Stasiak trong gh-113171.)
itertools¶
batched()có tham số strict mới, tham số này sẽ tăngValueErrornếu lô cuối cùng ngắn hơn kích thước lô được chỉ định. (Được đóng góp bởi Raymond Hettinger trong gh-113202.)
nguyên soái¶
Thêm tham số allow_code trong chức năng mô-đun. Việc chuyển
allow_code=Falsesẽ ngăn việc tuần tự hóa và hủy tuần tự hóa các đối tượng mã không tương thích giữa các phiên bản Python. (Được đóng góp bởi Serhiy Storchaka trong gh-113626.)
môn toán¶
Hàm mới
fma()thực hiện các thao tác cộng nhân hợp nhất. Điều này tính toánx * y + zchỉ với một vòng duy nhất và do đó tránh được bất kỳ sự mất độ chính xác trung gian nào. Nó bao bọc hàmfma()do C99 cung cấp và tuân theo thông số kỹ thuật của thao tác IEEE 754 "fusedMultiplyAdd" cho các trường hợp đặc biệt. (Được đóng góp bởi Mark Dickinson và Victor Stinner trong gh-73468.)
kiểu bắt chước¶
Thêm chức năng
guess_file_type()để đoán loại MIME từ đường dẫn hệ thống tệp. Sử dụng đường dẫn vớiguess_type()bây giờ là soft deprecated. (Được đóng góp bởi Serhiy Storchaka trong gh-66543.)
mmap¶
mmaphiện được bảo vệ khỏi sự cố trên Windows khi không thể truy cập được bộ nhớ được ánh xạ do lỗi hệ thống tệp hoặc vi phạm quyền truy cập. (Được đóng góp bởi Jannis Weigend trong gh-118209.)mmapcó một phương thứcseekable()mới có thể được sử dụng khi cần một đối tượng giống như tệp có thể tìm kiếm được. Phương thứcseek()hiện trả về vị trí tuyệt đối mới. (Được đóng góp bởi Donghee Na và Sylvie Liberman trong gh-111835.)Tham số trackfd chỉ dành cho UNIX mới dành cho
mmapkiểm soát việc sao chép bộ mô tả tệp; nếu sai, bộ mô tả tệp được chỉ định bởi fileno sẽ không bị trùng lặp. (Được đóng góp bởi Zackery Spytz và Petr Viktorin trong gh-78502.)
đa xử lý¶
Số luồng và quy trình công việc mặc định hiện được chọn bằng
os.process_cpu_count()thay vìos.cpu_count(). (Được đóng góp bởi Victor Stinner trong gh-109649.)
hệ điều hành¶
Thêm chức năng
process_cpu_count()để lấy số lõi CPU logic có thể sử dụng được bởi luồng gọi của quy trình hiện tại. (Được đóng góp bởi Victor Stinner trong gh-109649.)cpu_count()vàprocess_cpu_count()có thể được ghi đè thông qua biến môi trường mớiPYTHON_CPU_COUNThoặc tùy chọn dòng lệnh mới-X cpu_count. Tùy chọn này hữu ích cho những người dùng cần giới hạn tài nguyên CPU của hệ thống vùng chứa mà không phải sửa đổi mã ứng dụng hoặc chính vùng chứa đó. (Được đóng góp bởi Donghee Na trong gh-109595.)Thêm low level interface vào timer file descriptors của Linux thông qua
timerfd_create(),timerfd_settime(),timerfd_settime_ns(),timerfd_gettime(),timerfd_gettime_ns(),TFD_NONBLOCK,TFD_CLOEXEC,TFD_TIMER_ABSTIMEvàTFD_TIMER_CANCEL_ON_SET(Được đóng góp bởi Masaru Tsuchiyama trong gh-108277.)lchmod()và đối số follow_symlinks củachmod()hiện đã có sẵn trên Windows. Lưu ý rằng giá trị mặc định của follow_symlinks tronglchmod()làFalsetrên Windows. (Được đóng góp bởi Serhiy Storchaka trong gh-59616.)fchmod()và hỗ trợ mô tả tệp trongchmod()hiện đã có sẵn trên Windows. (Được đóng góp bởi Serhiy Storchaka trong gh-113191.)Trên Windows,
mkdir()vàmakedirs()hiện hỗ trợ chuyển giá trị mode của0o700để áp dụng kiểm soát truy cập vào thư mục mới. Điều này ngầm ảnh hưởng đếntempfile.mkdtemp()và là một biện pháp giảm nhẹ cho CVE 2024-4030. Các giá trị khác cho mode tiếp tục bị bỏ qua. (Được đóng góp bởi Steve Dower trong gh-118486.)posix_spawn()hiện chấp nhậnNonecho đối số env, điều này làm cho quy trình mới được sinh ra sử dụng môi trường quy trình hiện tại. (Được đóng góp bởi Jakub Kulik trong gh-113119.)posix_spawn()hiện có thể sử dụng thuộc tínhPOSIX_SPAWN_CLOSEFROMtrong tham số file_actions trên nền tảng hỗ trợposix_spawn_file_actions_addclosefrom_np(). (Được đóng góp bởi Jakub Kulik trong gh-113117.)
os.path¶
Thêm
isreserved()để kiểm tra xem đường dẫn có được bảo lưu trên hệ thống hiện tại hay không. Chức năng này chỉ có trên Windows. (Được đóng góp bởi Barney Gale trong gh-88569.)Trên Windows,
isabs()không còn coi các đường dẫn bắt đầu bằng chính xác một dấu gạch chéo (\hoặc/) là tuyệt đối. (Được đóng góp bởi Barney Gale và Jon Foster trong gh-44626.)realpath()hiện giải quyết tên tệp kiểu MS-DOS ngay cả khi không thể truy cập được tệp. (Được đóng góp bởi Moonsik Park trong gh-82367.)
đường dẫn¶
Thêm
UnsupportedOperation, được nâng lên thay vìNotImplementedErrorkhi thao tác đường dẫn không được hỗ trợ. (Được đóng góp bởi Barney Gale trong gh-89812.)Thêm một hàm tạo mới để tạo các đối tượng
Pathtừ URI 'tệp' (file:///),Path.from_uri(). (Được đóng góp bởi Barney Gale trong gh-107465.)Thêm
PurePath.full_match()để khớp đường dẫn với các ký tự đại diện kiểu shell, bao gồm cả ký tự đại diện đệ quy "**". (Được đóng góp bởi Barney Gale trong gh-73435.)Thêm thuộc tính lớp
PurePath.parserđể lưu trữ việc triển khaios.pathđược sử dụng để phân tích và nối đường dẫn cấp thấp. Đây sẽ làposixpathhoặcntpath.Thêm đối số chỉ từ khóa recurse_symlinks vào
Path.glob()vàrglob(). (Được đóng góp bởi Barney Gale trong gh-77609.)Path.glob()vàrglob()hiện trả về các tệp và thư mục khi được cung cấp mẫu kết thúc bằng "**". Trước đây, chỉ có các thư mục được trả về. (Được đóng góp bởi Barney Gale trong gh-70303.)Thêm đối số chỉ từ khóa follow_symlinks vào
Path.is_file,Path.is_dir,Path.owner()vàPath.group(). (Được đóng góp bởi Barney Gale trong gh-105793 và Kamil Turek trong gh-107962.)
pdb¶
breakpoint()vàset_trace()bây giờ vào trình gỡ lỗi ngay lập tức thay vì vào dòng mã tiếp theo sẽ được thực thi. Thay đổi này ngăn trình gỡ lỗi thoát ra ngoài ngữ cảnh khibreakpoint()được đặt ở cuối ngữ cảnh. (Được đóng góp bởi Tian Gao trong gh-118579.)sys.path[0]không còn được thay thế bằng thư mục của tập lệnh đang được gỡ lỗi khisys.flags.safe_pathđược đặt. (Được đóng góp bởi Tian Gao và Christian Walther trong gh-111762.)zipapphiện được hỗ trợ làm mục tiêu gỡ lỗi. (Được đóng góp bởi Tian Gao trong gh-118501.)Thêm khả năng di chuyển giữa các ngoại lệ được xâu chuỗi trong quá trình gỡ lỗi sau khi khám phá trong
pm()bằng lệnhexceptions [exc_number]mới cho Pdb. (Được đóng góp bởi Matthias Bussonnier trong gh-106676.)Các biểu thức và câu lệnh có tiền tố là lệnh pdb hiện được xác định và thực thi chính xác. (Được đóng góp bởi Tian Gao trong gh-108464.)
xếp hàng¶
Thêm
Queue.shutdownvàShutDownđể quản lý việc chấm dứt hàng đợi. (Được đóng góp bởi Laurie Opperman và Yves Duprat trong gh-104750.)
ngẫu nhiên¶
Thêm một command-line interface. (Được đóng góp bởi Hugo van Kemenade trong gh-118131.)
lại¶
Đổi tên
re.errorthànhPatternErrorđể cải thiện độ rõ nét.re.errorđược giữ lại để tương thích ngược.
im lặng¶
trang web¶
Các tệp
.pthhiện được giải mã bằng UTF-8 trước, sau đó bằng locale encoding nếu quá trình giải mã UTF-8 không thành công. (Được đóng góp bởi Inada Naoki trong gh-117802.)
sqlite3¶
Một
ResourceWarninghiện được phát ra nếu đối tượngConnectionkhông phải làclosedmột cách rõ ràng. (Được đóng góp bởi Erlend E. Aasland trong gh-105539.)Thêm tham số chỉ từ khóa filter vào
Connection.iterdump()để lọc các đối tượng cơ sở dữ liệu cần kết xuất. (Được đóng góp bởi Mariusz Felisiak trong gh-91602.)
ssl¶
create_default_context()API hiện bao gồmVERIFY_X509_PARTIAL_CHAINvàVERIFY_X509_STRICTtrong các cờ mặc định của nó.Ghi chú
VERIFY_X509_STRICTcó thể từ chối các chứng chỉ trước RFC 5280 hoặc không đúng định dạng mà việc triển khai OpenSSL cơ bản có thể chấp nhận. Mặc dù việc tắt tính năng này không được khuyến khích nhưng bạn có thể thực hiện bằng cách sử dụng:nhập khẩu ssl ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(Được đóng góp bởi William Woodruff trong gh-112389.)
thống kê¶
Thêm
kde()để ước tính mật độ hạt nhân. Điều này cho phép ước tính hàm mật độ xác suất liên tục từ một số mẫu rời rạc cố định. (Được đóng góp bởi Raymond Hettinger trong gh-115863.)Thêm
kde_random()để lấy mẫu từ hàm mật độ xác suất ước tính dokde()tạo. (Được đóng góp bởi Raymond Hettinger trong gh-115863.)
quy trình con¶
Mô-đun
subprocesshiện sử dụng chức năngposix_spawn()trong nhiều tình huống hơn.Đáng chú ý, khi close_fds là
True(mặc định),posix_spawn()sẽ được sử dụng khi thư viện C cung cấpposix_spawn_file_actions_addclosefrom_np(), bao gồm các phiên bản gần đây của Linux, FreeBSD và Solaris. Trên Linux, điều này sẽ hoạt động tương tự như mã dựa trên Linuxvfork()hiện có.Núm điều khiển riêng
subprocess._USE_POSIX_SPAWNcó thể được đặt thànhFalsenếu bạn cần buộcsubprocesskhông bao giờ sử dụngposix_spawn(). Vui lòng báo cáo lý do và chi tiết nền tảng của bạn trong issue tracker nếu bạn đặt điều này để chúng tôi có thể cải thiện logic lựa chọn API cho mọi người. (Được đóng góp bởi Jakub Kulik trong gh-113117.)
hệ thống¶
Thêm hàm
_is_interned()để kiểm tra xem một chuỗi có được thực hiện hay không. Chức năng này không được đảm bảo tồn tại trong tất cả các triển khai Python. (Được đóng góp bởi Serhiy Storchaka trong gh-78573.)
tập tin tạm thời¶
Trên Windows, chế độ mặc định
0o700đượctempfile.mkdtemp()sử dụng hiện giới hạn quyền truy cập vào thư mục mới do những thay đổi đối vớios.mkdir(). Đây là biện pháp giảm nhẹ cho CVE 2024-4030. (Được đóng góp bởi Steve Dower trong gh-118486.)
thời gian¶
Trên Windows,
monotonic()hiện sử dụng đồng hồQueryPerformanceCounter()cho độ phân giải 1 micro giây, thay vì đồng hồGetTickCount64()có độ phân giải 15,6 mili giây. (Được đóng góp bởi Victor Stinner trong gh-88494.)Trên Windows,
time()hiện sử dụng đồng hồGetSystemTimePreciseAsFileTime()cho độ phân giải 1 micro giây, thay vì đồng hồGetSystemTimeAsFileTime()có độ phân giải 15,6 mili giây. (Được đóng góp bởi Victor Stinner trong gh-63207.)
tkinter¶
Thêm các phương thức tiện ích
tkinter:tk_busy_hold(),tk_busy_configure(),tk_busy_cget(),tk_busy_forget(),tk_busy_current()vàtk_busy_status(). (Được đóng góp bởi Miguel, klappnase và Serhiy Storchaka trong gh-72684.)Phương thức tiện ích
tkinterwm_attributes()hiện chấp nhận tên thuộc tính không có tiền tố dấu trừ để lấy thuộc tính cửa sổ, ví dụw.wm_attributes('alpha')và cho phép chỉ định các thuộc tính và giá trị để đặt làm đối số từ khóa, ví dụw.wm_attributes(alpha=0.5). (Được đóng góp bởi Serhiy Storchaka trong gh-43457.)wm_attributes()hiện có thể trả về các thuộc tính dưới dạngdictbằng cách sử dụng tham số return_python_dict chỉ có từ khóa tùy chọn mới. (Được đóng góp bởi Serhiy Storchaka trong gh-43457.)Text.count()giờ đây có thể trả về mộtintđơn giản khi tham số return_ints chỉ có từ khóa tùy chọn mới được sử dụng. Nếu không, số đếm đơn sẽ được trả về dưới dạng 1-tuple hoặcNone. (Được đóng góp bởi Serhiy Storchaka trong gh-97928.)Hỗ trợ loại phần tử "vsapi" trong phương thức
element_create()củatkinter.ttk.Style. (Được đóng góp bởi Serhiy Storchaka trong gh-68166.)Thêm phương thức
after_info()cho các tiện ích Tkinter. (Được đóng góp bởi Cheryl Sabella trong gh-77020.)Thêm phương thức
copy_replace()mới vàoPhotoImageđể sao chép một vùng từ hình ảnh này sang hình ảnh khác, có thể bằng cách thu phóng pixel, lấy mẫu con hoặc cả hai. (Được đóng góp bởi Serhiy Storchaka trong gh-118225.)Thêm tham số from_coords vào các phương thức
PhotoImagecopy(),zoom()vàsubsample(). Thêm tham số zoom và subsample vào phương thứcPhotoImagecopy(). (Được đóng góp bởi Serhiy Storchaka trong gh-118225.)Thêm các phương thức
PhotoImageread()để đọc hình ảnh từ một tệp vàdata()để lấy dữ liệu hình ảnh. Thêm tham số background và grayscale vào phương thứcwrite(). (Được đóng góp bởi Serhiy Storchaka trong gh-118271.)
truy nguyên¶
Thêm thuộc tính
exc_type_strvàoTracebackException, thuộc tính này chứa hiển thị chuỗi của exc_type. Không dùng nữa thuộc tínhexc_type, thuộc tính chứa chính đối tượng kiểu đó. Thêm tham số save_exc_type (Truemặc định) để cho biết có nên lưuexc_typehay không. (Được đóng góp bởi Irit Katriel trong gh-112332.)Thêm một tham số chỉ từ khóa show_group mới vào
TracebackException.format_exception_only()để định dạng (đệ quy) các ngoại lệ lồng nhau của phiên bảnBaseExceptionGroup. (Được đóng góp bởi Irit Katriel trong gh-105292.)
các loại¶
SimpleNamespacehiện có thể lấy một đối số vị trí duy nhất để khởi tạo các đối số của không gian tên. Đối số này phải là ánh xạ hoặc có thể lặp lại các cặp khóa-giá trị. (Được đóng góp bởi Serhiy Storchaka trong gh-108191.)
đánh máy¶
PEP 705: Thêm
ReadOnly, một cấu trúc gõ đặc biệt để đánh dấu mụcTypedDictlà chỉ đọc cho trình kiểm tra loại.PEP 742: Thêm
TypeIs, một cấu trúc gõ có thể được sử dụng để hướng dẫn người kiểm tra loại cách thu hẹp một loại.Thêm
NoDefault, một đối tượng trọng điểm được sử dụng để thể hiện giá trị mặc định của một số tham số trong mô-đuntyping. (Được đóng góp bởi Jelle Zijlstra trong gh-116126.)Thêm
get_protocol_members()để trả về tập hợp các thành viên xác địnhtyping.Protocol. (Được đóng góp bởi Jelle Zijlstra trong gh-104873.)Thêm
is_protocol()để kiểm tra xem một lớp có phải làProtocolhay không. (Được đóng góp bởi Jelle Zijlstra trong gh-104873.)ClassVarhiện có thể được lồng trongFinalvà ngược lại. (Được đóng góp bởi Mehdi Drissi trong gh-89547.)
dữ liệu unicode¶
Cập nhật cơ sở dữ liệu Unicode lên version 15.1.0. (Được đóng góp bởi James Gerity trong gh-109559.)
venv¶
Thêm hỗ trợ tạo các tệp bỏ qua quản lý kiểm soát nguồn (SCM) trong thư mục của môi trường ảo. Theo mặc định, Git được hỗ trợ. Điều này được triển khai dưới dạng chọn tham gia thông qua API, có thể được mở rộng để hỗ trợ các SCM khác (
EnvBuildervàcreate()) và chọn không tham gia thông qua CLI, sử dụng--without-scm-ignore-files. (Được đóng góp bởi Brett Cannon trong gh-108125.)
cảnh báo¶
PEP 702: Trình trang trí
warnings.deprecated()mới cung cấp một cách để truyền đạt thông tin không dùng nữa cho static type checker và cảnh báo về việc sử dụng các lớp và hàm không được dùng nữa. MộtDeprecationWarningcũng có thể được phát ra khi một hàm hoặc lớp được trang trí được sử dụng trong thời gian chạy. (Được đóng góp bởi Jelle Zijlstra trong gh-104003.)
xml¶
Cho phép kiểm soát Expat >=2.6.0 trả lại phân tích cú pháp (CVE 2023-52425) bằng cách thêm năm phương thức mới:
xml.sax.expatreader.ExpatParser.flush()
(Được đóng góp bởi Sebastian Pipping trong gh-115623.)
Thêm phương thức
close()cho trình lặp được trả về bởiiterparse()để dọn dẹp rõ ràng. (Được đóng góp bởi Serhiy Storchaka trong gh-69893.)
nhập khẩu zip¶
Tối ưu hóa¶
Một số mô-đun thư viện tiêu chuẩn đã có thời gian nhập được cải thiện đáng kể. Ví dụ: thời gian nhập của mô-đun
typingđã giảm khoảng một phần ba bằng cách loại bỏ các phần phụ thuộc vàorevàcontextlib. Các mô-đun khác giúp tăng tốc thời gian nhập bao gồmemail.utils,enum,functools,importlib.metadatavàthreading. (Được đóng góp bởi Alex Waygood, Shantanu Jain, Adam Turner, Daniel Hollas và những người khác trong gh-109653.)textwrap.indent()hiện nhanh hơn khoảng 30% so với trước đây đối với đầu vào lớn. (Được đóng góp bởi Inada Naoki trong gh-107369.)Mô-đun
subprocesshiện sử dụng chức năngposix_spawn()trong nhiều tình huống hơn, kể cả khi close_fds làTrue(mặc định) trên nhiều nền tảng hiện đại. Điều này sẽ mang lại sự gia tăng hiệu suất đáng chú ý khi khởi chạy các quy trình trên FreeBSD và Solaris. Xem phần subprocess ở trên để biết chi tiết. (Được đóng góp bởi Jakub Kulik trong gh-113117.)
Các mô-đun và API đã bị xóa¶
PEP 594: Loại bỏ "pin chết" khỏi thư viện chuẩn¶
PEP 594 đã đề xuất xóa 19 mô-đun khỏi thư viện tiêu chuẩn, thường được gọi là 'pin chết' do trạng thái lịch sử, lỗi thời hoặc không an toàn của chúng. Tất cả các mô-đun sau không được dùng nữa trong Python 3.11 và hiện đã bị xóa:
aifcstandard-aifc: Sử dụng phân phối lại thư viện
aifctừ PyPI.
audioopaudioop-lts: Sử dụng thư viện
audioop-ltstừ PyPI.
chunkstandard-chunk: Sử dụng phân phối lại thư viện
chunktừ PyPI.
cgivàcgitbcgi.FieldStoragethường có thể được thay thế bằngurllib.parse.parse_qsl()cho các yêu cầuGETvàHEADvà mô-đunemail.messagehoặc thư viện multipart cho các yêu cầuPOSTvàPUT.cgi.parse()có thể được thay thế bằng cách gọiurllib.parse.parse_qs()trực tiếp trên chuỗi truy vấn mong muốn, trừ khi đầu vào làmultipart/form-data, cần thay thế như mô tả bên dưới chocgi.parse_multipart().cgi.parse_header()có thể được thay thế bằng chức năng trong góiemail, gói này triển khai các RFC MIME tương tự. Ví dụ: vớiemail.message.EmailMessage:từ nhập email.message EmailMessage tin nhắn = EmailMessage() msg['content-type'] = 'application/json; bộ ký tự="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
cgi.parse_multipart()có thể được thay thế bằng chức năng trong góiemail, gói này triển khai cùng các RFC MIME hoặc bằng thư viện multipart. Ví dụ: các lớpemail.message.EmailMessagevàemail.message.Message.standard-cgi: và standard-cgitb: Sử dụng phân phối lại thư viện
cgivàcgitbtừ PyPI.
cryptvà tiện ích mở rộng_cryptriêng tư. Mô-đunhashlibcó thể là sự thay thế thích hợp khi chỉ cần băm một giá trị. Mặt khác, có sẵn nhiều thư viện của bên thứ ba trên PyPI:bcrypt: Băm mật khẩu hiện đại cho phần mềm và máy chủ của bạn.
argon2-cffi: Thuật toán băm mật khẩu Argon2 an toàn.
legacycrypt: trình bao bọc
ctypescho lệnh gọi thư viện mật mã POSIX và chức năng liên quan.crypt_r: Phân nhánh của mô-đun
crypt, trình bao bọc lệnh gọi thư viện crypt_r(3) và chức năng liên quan.standard-crypt và deprecated-crypt-alternative: Sử dụng bản phân phối lại
cryptvà triển khai lại các thư viện_crypttừ PyPI.
imghdr: Nên sử dụng các thư viện filetype, puremagic hoặc python-magic để thay thế. Ví dụ: hàmpuremagic.what()có thể được sử dụng để thay thế hàmimghdr.what()cho tất cả các định dạng tệp đượcimghdrhỗ trợ.standard-imghdr: Sử dụng phân phối lại thư viện
imghdrtừ PyPI.
mailcap: Thay vào đó hãy sử dụng mô-đunmimetypes.standard-mailcap: Sử dụng phân phối lại thư viện
mailcaptừ PyPI.
msilibnisnntplib: Thay vào đó hãy sử dụng thư viện pynntp từ PyPI.standard-nntplib: Sử dụng phân phối lại thư viện
nntplibtừ PyPI.
ossaudiodev: Để phát lại âm thanh, thay vào đó hãy sử dụng thư viện pygame từ PyPI.pipes: Thay vào đó hãy sử dụng mô-đunsubprocess. Sử dụngshlex.quote()để thay thế hàmpipes.quotekhông có giấy tờ.standard-pipes: Sử dụng phân phối lại thư viện
pipestừ PyPI.
sndhdr: Nên sử dụng các thư viện filetype, puremagic hoặc python-magic để thay thế.standard-sndhdr: Sử dụng phân phối lại thư viện
sndhdrtừ PyPI.
spwd: Thay vào đó hãy sử dụng thư viện python-pam từ PyPI.sunaustandard-sunau: Sử dụng phân phối lại thư viện
sunautừ PyPI.
telnetlib, thay vào đó hãy sử dụng thư viện telnetlib3 hoặc Exscript từ PyPI.standard-telnetlib: Sử dụng phân phối lại thư viện
telnetlibtừ PyPI.
uu: Thay vào đó, hãy sử dụng mô-đunbase64như một giải pháp thay thế hiện đại.standard-uu: Sử dụng phân phối lại thư viện
uutừ PyPI.
xdrlibstandard-xdrlib: Sử dụng phân phối lại thư viện
xdrlibtừ PyPI.
(Được đóng góp bởi Victor Stinner và Zachary Ware trong gh-104773 và gh-104780.)
2to3¶
Xóa chương trình 2to3 và mô-đun
lib2to3, trước đây không được dùng nữa trong Python 3.11. (Được đóng góp bởi Victor Stinner trong gh-104780.)
nội dung¶
Xóa hỗ trợ cho các bộ mô tả
classmethodđược xâu chuỗi (được giới thiệu trong gh-63272). Chúng không còn có thể được sử dụng để bao bọc các bộ mô tả khác, chẳng hạn nhưproperty. Thiết kế cốt lõi của tính năng này có sai sót và dẫn đến một số vấn đề. Để "chuyển qua"classmethod, hãy cân nhắc sử dụng thuộc tính__wrapped__đã được thêm vào Python 3.10. (Được đóng góp bởi Raymond Hettinger trong gh-89519.)Tăng
RuntimeErrorkhi gọiframe.clear()trên khung bị treo (như thường lệ đối với khung thực thi). (Được đóng góp bởi Irit Katriel trong gh-79932.)
trình phân tích cú pháp cấu hình¶
Xóa lớp
LegacyInterpolationkhông có giấy tờ, không được dùng nữa trong chuỗi tài liệu kể từ Python 3.2 và trong thời gian chạy kể từ Python 3.11. (Được đóng góp bởi Hugo van Kemenade trong gh-104886.)
importlib.metadata¶
Xóa quyền truy cập chỉ số dưới (
__getitem__()) không được dùng nữa cho các đối tượng EntryPoint. (Được đóng góp bởi Jason R. Coombs trong gh-113175.)
ngôn ngữ¶
Xóa hàm
locale.resetlocale(), không được dùng nữa trong Python 3.11. Thay vào đó hãy sử dụnglocale.setlocale(locale.LC_ALL, ""). (Được đóng góp bởi Victor Stinner trong gh-104783.)
mã lệnh¶
Di chuyển
opcode.ENABLE_SPECIALIZATIONsang_opcode.ENABLE_SPECIALIZATION. Trường này đã được thêm vào phiên bản 3.12, nó chưa bao giờ được ghi lại và không nhằm mục đích sử dụng bên ngoài. (Được đóng góp bởi Irit Katriel trong gh-105481.)Xóa
opcode.is_pseudo(),opcode.MIN_PSEUDO_OPCODEvàopcode.MAX_PSEUDO_OPCODEđã được thêm vào Python 3.12 nhưng không được ghi lại cũng như không được hiển thị thông quadisvà không nhằm mục đích sử dụng bên ngoài. (Được đóng góp bởi Irit Katriel trong gh-105481.)
phân tích cú pháp¶
Mô-đun này không còn được coi là soft deprecated nữa. Mặc dù
argparsevẫn được ưu tiên cho các dự án mới không sử dụng thư viện xử lý đối số dòng lệnh của bên thứ ba, nhưng có một số khía cạnh trong cáchargparsehoạt động có nghĩa là mô-đunoptparsecấp thấp hơn có thể cung cấp nền tảng tốt hơn cho các thư viện xử lý đối số writing và để triển khai các ứng dụng dòng lệnh tuân thủ nghiêm ngặt hơnargparseđối với các quy ước xử lý dòng lệnh Unix khác nhau bắt nguồn từ hoạt động của hàm Cgetopt(). (Được đóng góp bởi Alyssa Coghlan và Serhiy Storchaka trong gh-126180.)
đường dẫn¶
lại¶
Xóa hàm
re.template()không có giấy tờ, không được dùng nữa và bị hỏng cũng như cờre.TEMPLATE/re.T. (Được đóng góp bởi Serhiy Storchaka và Nikita Sobolev trong gh-105687.)
tkinter.tix¶
Xóa mô-đun
tkinter.tix, không được dùng nữa trong Python 3.6. Thư viện Tix của bên thứ ba mà mô-đun bao bọc không được bảo trì. (Được đóng góp bởi Zachary Ware trong gh-75552.)
rùa¶
Xóa phương thức
RawTurtle.settiltangle(), không được dùng nữa trong tài liệu kể từ Python 3.1 và trong thời gian chạy kể từ Python 3.11. (Được đóng góp bởi Hugo van Kemenade trong gh-104876.)
đánh máy¶
Xóa các không gian tên
typing.iovàtyping.re, không được dùng nữa kể từ Python 3.8. Các mục trong các không gian tên đó có thể được nhập trực tiếp từ mô-đuntyping. (Được đóng góp bởi Sebastian Rittau trong gh-92871.)Xóa phương thức đối số từ khóa để tạo các loại
TypedDict, không được dùng nữa trong Python 3.11. (Được đóng góp bởi Tomas Roun trong gh-104786.)
nhỏ nhất¶
Xóa các hàm
unittestsau, không được dùng nữa trong Python 3.11:unittest.findTestCases()unittest.makeSuite()unittest.getTestCaseNames()
Thay vào đó hãy sử dụng các phương thức
TestLoader:(Được đóng góp bởi Hugo van Kemenade trong gh-104835.)
Xóa phương thức
TestProgram.usageExit()chưa được kiểm tra và không có giấy tờ, không được dùng nữa trong Python 3.11. (Được đóng góp bởi Hugo van Kemenade trong gh-104992.)
urllib¶
Xóa các tham số cafile, capath và cadefault của hàm
urllib.request.urlopen(), không được dùng nữa trong Python 3.6. Thay vào đó, hãy sử dụng tham số context bằng phiên bảnSSLContext. Chức năngssl.SSLContext.load_cert_chain()có thể được sử dụng để tải các chứng chỉ cụ thể hoặc đểssl.create_default_context()chọn chứng chỉ của tổ chức phát hành chứng chỉ tin cậy (CA) của hệ điều hành. (Được đóng góp bởi Victor Stinner trong gh-105382.)
trình duyệt web¶
Xóa lớp
MacOSXchưa được kiểm tra và không có giấy tờ, không được dùng nữa trong Python 3.11. Thay vào đó, hãy sử dụng lớpMacOSXOSAScript(được giới thiệu trong Python 3.2). (Được đóng góp bởi Hugo van Kemenade trong gh-104804.)Xóa thuộc tính
MacOSXOSAScript._namekhông được dùng nữa. Thay vào đó hãy sử dụng thuộc tínhMacOSXOSAScript.name. (Được đóng góp bởi Nikita Sobolev trong gh-105546.)
Điểm dừng mới¶
-
Không dùng nữa hàm
SetPointerType()không có giấy tờ, sẽ bị xóa trong Python 3.15. (Được đóng góp bởi Victor Stinner trong gh-105733.)Soft-deprecate chức năng
ARRAY()thiên về phép nhântype * length. (Được đóng góp bởi Victor Stinner trong gh-105733.)
dis:-
Loại bỏ các số không nguyên làm đối số cho các hàm và phương thức xem xét dạng số nhiều trong mô-đun
gettext, ngay cả khi không tìm thấy bản dịch nào. (Được đóng góp bởi Serhiy Storchaka trong gh-88434.)
glob:Không dùng nữa các hàm
glob0()vàglob1()không có giấy tờ. Thay vào đó, hãy sử dụngglob()và chuyển path-like object chỉ định thư mục gốc cho tham số root_dir. (Được đóng góp bởi Barney Gale trong gh-117337.)
-
Không dùng
CGIHTTPRequestHandlernữa, sẽ bị xóa trong Python 3.15. Các máy chủ CGI HTTP dựa trên quy trình đã không còn được ưa chuộng trong một thời gian rất dài. Mã này đã lỗi thời, không được bảo trì và hiếm khi được sử dụng. Nó có tiềm năng cao về cả lỗi bảo mật và chức năng. (Được đóng góp bởi Gregory P. Smith trong gh-109096.)Không dùng cờ
--cgicho giao diện dòng lệnh python -m http.server, sẽ bị xóa trong Python 3.15. (Được đóng góp bởi Gregory P. Smith trong gh-109096.)
-
Đối số đường dẫn tệp Soft-deprecate tới
guess_type(), thay vào đó hãy sử dụngguess_file_type(). (Được đóng góp bởi Serhiy Storchaka trong gh-66543.)
re:Không dùng nữa việc chuyển các đối số maxsplit, count hoặc flags tùy chọn làm đối số vị trí cho các hàm
split(),sub()vàsubn()cấp mô-đun. Các tham số này sẽ trở thành keyword-only trong phiên bản Python trong tương lai. (Được đóng góp bởi Serhiy Storchaka trong gh-56166.)
-
Không dùng
PurePath.is_reserved()nữa, sẽ bị xóa trong Python 3.15. Sử dụngos.path.isreserved()để phát hiện các đường dẫn dành riêng trên Windows. (Được đóng góp bởi Barney Gale trong gh-88569.)
-
Không dùng
java_ver()nữa, sẽ bị xóa trong Python 3.15. 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. (Được đóng góp bởi Nikita Sobolev trong gh-116349.)
-
Không dùng nữa chức năng
ispackage()không có giấy tờ. (Được đóng góp bởi Zackery Spytz trong gh-64020.)
-
Không dùng nữa việc chuyển nhiều hơn một đối số vị trí cho hàm
connect()và hàm tạoConnection. Các tham số còn lại sẽ chỉ có từ khóa trong Python 3.15. (Được đóng góp bởi Erlend E. Aasland trong gh-107948.)Không dùng tên truyền, số lượng đối số và đối số có thể gọi làm đối số từ khóa cho
Connection.create_function()vàConnection.create_aggregate(). Các tham số này sẽ chỉ có vị trí trong Python 3.15. (Được đóng góp bởi Erlend E. Aasland trong gh-108278.)Không dùng nữa việc chuyển lệnh gọi lại có thể gọi theo từ khóa cho các phương thức
set_authorizer(),set_progress_handler()vàset_trace_callback()Connection. Các lệnh gọi lại có thể gọi lại sẽ chỉ có vị trí trong Python 3.15. (Được đóng góp bởi Erlend E. Aasland trong gh-108278.)
sys:Không dùng nữa hàm
_enablelegacywindowsfsencoding(), sẽ bị xóa trong Python 3.16. Thay vào đó hãy sử dụng biến môi trườngPYTHONLEGACYWINDOWSFSENCODING. (Được đóng góp bởi Inada Naoki trong gh-73427.)
-
Không dùng nữa thuộc tính
TarFile.tarfilekhông có giấy tờ và không được sử dụng, sẽ bị xóa trong Python 3.16. (Đã đóng góp trong gh-115256.)
-
Không dùng thuộc tính
TracebackException.exc_typenữa. Thay vào đó hãy sử dụngTracebackException.exc_type_str. (Được đóng góp bởi Irit Katriel trong gh-112332.)
-
Không dùng 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)), sẽ bị xóa trong Python 3.15. 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. (Được đóng góp bởi Alex Waygood trong gh-105566.)Không dùng nữa việc bỏ qua tham số fields khi tạo lớp
NamedTuplehoặctyping.TypedDictvà không dùng nữa việc chuyểnNonesang tham số fields của cả hai loại. Python 3.15 sẽ yêu cầu một chuỗi hợp lệ cho tham số fields. Để tạo một lớp NamedTuple không có trường nào, hãy sử dụngclass NT(NamedTuple): passhoặcNT = NamedTuple("NT", ()). Để tạo lớp TypedDict không có trường nào, hãy sử dụngclass TD(TypedDict): passhoặcTD = TypedDict("TD", {}). (Được đóng góp bởi Alex Waygood trong gh-105566 và gh-105570.)Không dùng nữa chức năng trang trí
typing.no_type_check_decorator(), sẽ bị xóa trong Python 3.15. 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. (Được đóng góp bởi Alex Waygood trong gh-106309.)Không dùng nữa
typing.AnyStr. Trong Python 3.16, nó sẽ bị xóa khỏityping.__all__vàDeprecationWarningsẽ được phát ra trong thời gian chạy khi nó được nhập hoặc truy cập. Nó sẽ bị xóa hoàn toàn trong Python 3.18. Thay vào đó hãy sử dụng type parameter syntax mới. (Được đóng góp bởi Michael Thế trong gh-107116.)
wave:Không dùng nữa các phương thức
getmark(),setmark()vàgetmarkers()của các lớpWave_readvàWave_write, sẽ bị xóa trong Python 3.15. (Được đóng góp bởi Victor Stinner trong gh-105096.)
Đang chờ xóa trong Python 3.14¶
argparse: Các tham số type, choices và metavar củaargparse.BooleanOptionalActionkhông được dùng nữa và sẽ bị xóa trong phiên bản 3.14. (Được đóng góp bởi Nikita Sobolev trong gh-92248.)ast: Các tính năng sau không được dùng nữa trong tài liệu kể từ Python 3.8, hiện khiếnDeprecationWarningđược phát ra trong thời gian chạy khi chúng được truy cập hoặc sử dụng và sẽ bị xóa trong Python 3.14:ast.Numast.Strast.Bytesast.NameConstantast.Ellipsis
Thay vào đó hãy sử dụng
ast.Constant. (Được đóng góp bởi Serhiy Storchaka trong gh-90953.)-
Các lớp trình giám sát con
asyncio.MultiLoopChildWatcher,asyncio.FastChildWatcher,asyncio.AbstractChildWatchervàasyncio.SafeChildWatcherkhông được dùng nữa và sẽ bị xóa trong Python 3.14. (Được đóng góp bởi Kumar Aditya trong gh-94597.)asyncio.set_child_watcher(),asyncio.get_child_watcher(),asyncio.AbstractEventLoopPolicy.set_child_watcher()vàasyncio.AbstractEventLoopPolicy.get_child_watcher()không được dùng nữa và sẽ bị xóa trong Python 3.14. (Được đóng góp bởi Kumar Aditya trong gh-94597.)Phương thức
get_event_loop()của chính sách vòng lặp sự kiện mặc định hiện phát raDeprecationWarningnếu không có bộ vòng lặp sự kiện hiện tại và nó quyết định tạo một vòng lặp sự kiện. (Được đóng góp bởi Serhiy Storchaka và Guido van Rossum trong gh-100160.)
email: Không dùng tham số isdst trongemail.utils.localtime(). (Được đóng góp bởi Alan Williams trong gh-72346.)importlib.abccác lớp không dùng nữa:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Thay vào đó hãy sử dụng các lớp
importlib.resources.abc:(Được đóng góp bởi Jason R. Coombs và Hugo van Kemenade trong gh-93963.)
itertoolscó sự hỗ trợ không có giấy tờ, không hiệu quả, có lỗi lịch sử và không nhất quán cho các hoạt động sao chép, sao chép sâu và chọn dưa. Điều này sẽ bị loại bỏ trong 3.14 để giảm đáng kể khối lượng mã và gánh nặng bảo trì. (Được đóng góp bởi Raymond Hettinger trong gh-101588.)multiprocessing: Phương thức khởi động mặc định sẽ thay đổi thành phương thức an toàn hơn trên Linux, BSD và các nền tảng POSIX không phải macOS khác trong đó'fork'hiện là mặc định (gh-84559). Việc thêm cảnh báo thời gian chạy về vấn đề này được cho là quá rắc rối vì phần lớn mã dự kiến sẽ không được quan tâm. Sử dụng APIget_context()hoặcset_start_method()để chỉ định rõ ràng thời điểm mã của bạn requires'fork'. Xem Bối cảnh và phương pháp bắt đầu.pathlib:is_relative_to()vàrelative_to(): việc truyền các đối số bổ sung không được dùng nữa.pkgutil:pkgutil.find_loader()vàpkgutil.get_loader()hiện tăngDeprecationWarning; thay vào đó hãy sử dụngimportlib.util.find_spec(). (Được đóng góp bởi Nikita Sobolev trong gh-97850.)pty:master_open(): sử dụngpty.openpty().slave_open(): sử dụngpty.openpty().
-
versionvàversion_info.execute()vàexecutemany()nếu named placeholders được sử dụng và parameters là một chuỗi thay vìdict.
urllib:urllib.parse.Quoterkhông được dùng nữa: nó không được dự định là API công khai. (Được đóng góp bởi Gregory P. Smith trong gh-88168.)
Đ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¶
Oparg của
YIELD_VALUEbây giờ là1nếu sản lượng là một phần của sản lượng từ hoặc đang chờ và0nếu ngược lại. Oparg củaRESUMEđã được thay đổi để thêm một chút cho biết nếu độ sâu ngoại trừ là 1, điều này cần thiết để tối ưu hóa việc đóng máy phát điện. (Được đóng góp bởi Irit Katriel trong gh-111354.)
C API Thay đổi¶
Tính năng mới¶
Thêm PyMonitoring C API để tạo các sự kiện giám sát PEP 669:
PyMonitoring_FireBranchEvent
(Được đóng góp bởi Irit Katriel trong gh-111997).
Thêm
PyMutex, một mutex nhẹ chiếm một byte đơn và các hàmPyMutex_Lock()vàPyMutex_Unlock()mới.PyMutex_Lock()sẽ giải phóng GIL (nếu hiện đang được giữ) nếu thao tác cần chặn. (Được đóng góp bởi Sam Gross trong gh-108724.)Thêm PyTime C API để cung cấp quyền truy cập vào đồng hồ hệ thống:
PyTime_MINvàPyTime_MAX.
(Được đóng góp bởi Victor Stinner và Petr Viktorin trong gh-110850.)
Thêm hàm
PyDict_ContainsString()có hành vi tương tự nhưPyDict_Contains(), nhưng key được chỉ định dưới dạng chuỗi byte được mã hóa const char* UTF-8, thay vì PyObject*. (Được đóng góp bởi Victor Stinner trong gh-108314.)Thêm các hàm
PyDict_GetItemRef()vàPyDict_GetItemStringRef(), hoạt động tương tự nhưPyDict_GetItemWithError(), nhưng trả về strong reference thay vì borrowed reference. Hơn nữa, các hàm này trả về-1do lỗi, loại bỏ nhu cầu kiểm traPyErr_Occurred(). (Được đóng góp bởi Victor Stinner trong gh-106004.)Thêm hàm
PyDict_SetDefaultRef(), hoạt động tương tự nhưPyDict_SetDefault()nhưng trả về strong reference thay vì borrowed reference. Hàm này trả về-1khi có lỗi,0khi chèn và1nếu khóa đã có trong từ điển. (Được đóng góp bởi Sam Gross trong gh-112066.)Thêm các hàm
PyDict_Pop()vàPyDict_PopString()để xóa khóa khỏi từ điển và tùy ý trả về giá trị đã xóa. Điều này tương tự vớidict.pop(), mặc dù không có giá trị mặc định vàKeyErrorkhông được nâng lên khi thiếu khóa. (Được đóng góp bởi Stefan Behnel và Victor Stinner trong gh-111262.)Thêm các hàm
PyMapping_GetOptionalItem()vàPyMapping_GetOptionalItemString()thay thế choPyObject_GetItem()vàPyMapping_GetItemString()tương ứng. Các chức năng mới không tăngKeyErrornếu thiếu khóa được yêu cầu trong ánh xạ. Các biến thể này sẽ thuận tiện hơn và nhanh hơn nếu phím bị thiếu không được coi là lỗi. (Được đóng góp bởi Serhiy Storchaka trong gh-106307.)Thêm các hàm
PyObject_GetOptionalAttr()vàPyObject_GetOptionalAttrString()thay thế choPyObject_GetAttr()vàPyObject_GetAttrString()tương ứng. Các hàm mới không tăngAttributeErrornếu không tìm thấy thuộc tính được yêu cầu trên đối tượng. Các biến thể này sẽ thuận tiện hơn và nhanh hơn nếu thuộc tính bị thiếu không được coi là lỗi. (Được đóng góp bởi Serhiy Storchaka trong gh-106521.)Thêm chức năng
PyErr_FormatUnraisable()làm tiện ích mở rộng choPyErr_WriteUnraisable()cho phép tùy chỉnh thông báo cảnh báo. (Được đóng góp bởi Serhiy Storchaka trong gh-108082.)Thêm các hàm mới trả về strong reference thay vì borrowed reference cho khung cục bộ, toàn cục và nội trang, như một phần của PEP 667:
(Được đóng góp bởi Mark Shannon và Tian Gao trong gh-74929.)
Thêm các hàm
Py_GetConstant()vàPy_GetConstantBorrowed()để nhận các tham chiếu strong hoặc borrowed cho các hằng số. Ví dụ:Py_GetConstant(Py_CONSTANT_ZERO)trả về một tham chiếu mạnh tới hằng số 0. (Được đóng góp bởi Victor Stinner trong gh-115754.)Thêm hàm
PyImport_AddModuleRef()thay thế choPyImport_AddModule()để trả về strong reference thay vì borrowed reference. (Được đóng góp bởi Victor Stinner trong gh-105922.)Thêm hàm
Py_IsFinalizing()để kiểm tra xem trình thông dịch Python chính có phải là shutting down hay không. (Được đóng góp bởi Victor Stinner trong gh-108014.)Thêm hàm
PyList_GetItemRef()thay thế choPyList_GetItem()để trả về strong reference thay vì borrowed reference. (Được đóng góp bởi Sam Gross trong gh-114329.)Thêm các hàm
PyList_Extend()vàPyList_Clear(), phản chiếu các phương thứclist.extend()vàlist.clear()của Python. (Được đóng góp bởi Victor Stinner trong gh-111138.)Thêm chức năng
PyLong_AsInt(). Nó hoạt động tương tự nhưPyLong_AsLong(), nhưng lưu trữ kết quả trong C int thay vì C long. (Được đóng góp bởi Victor Stinner trong gh-108014.)Thêm các hàm
PyLong_AsNativeBytes(),PyLong_FromNativeBytes()vàPyLong_FromUnsignedNativeBytes()để đơn giản hóa việc chuyển đổi giữa các kiểu số nguyên gốc và đối tượng Pythonint. (Được đóng góp bởi Steve Dower trong gh-111140.)Thêm hàm
PyModule_Add(), tương tự nhưPyModule_AddObjectRef()vàPyModule_AddObject(), nhưng luôn lấy tham chiếu đến giá trị. (Được đóng góp bởi Serhiy Storchaka trong gh-86493.)Thêm hàm
PyObject_GenericHash()thực hiện hàm băm mặc định của đối tượng Python. (Được đóng góp bởi Serhiy Storchaka trong gh-113024.)Thêm hàm
Py_HashPointer()để băm một con trỏ thô. (Được đóng góp bởi Victor Stinner trong gh-111545.)Thêm chức năng
PyObject_VisitManagedDict()vàPyObject_ClearManagedDict(). phải được gọi bằng các hàm duyệt và xóa của một loại bằng cách sử dụng cờPy_TPFLAGS_MANAGED_DICT. pythoncapi-compat project có thể được sử dụng để sử dụng các hàm này với Python 3.11 và 3.12. (Được đóng góp bởi Victor Stinner trong gh-107073.)Thêm các hàm
PyRefTracer_SetTracer()vàPyRefTracer_GetTracer(), cho phép theo dõi việc tạo và hủy đối tượng giống như cách mà mô-đuntracemallocthực hiện. (Được đóng góp bởi Pablo Galindo trong gh-93502.)Thêm hàm
PySys_AuditTuple()thay thế choPySys_Audit()lấy các đối số sự kiện làm đối tượngtuplecủa Python. (Được đóng góp bởi Victor Stinner trong gh-85283.)Thêm chức năng
PyThreadState_GetUnchecked()thay thế choPyThreadState_Get()để không giết chết tiến trình với lỗi nghiêm trọng nếu đó làNULL. Người gọi có trách nhiệm kiểm tra xem kết quả có phải làNULLhay không. (Được đóng góp bởi Victor Stinner trong gh-108867.)Thêm chức năng
PyType_GetFullyQualifiedName()để có được tên đầy đủ của loại. Tên mô-đun được thêm vào trước nếutype.__module__là một chuỗi và không bằng'builtins'hoặc'__main__'. (Được đóng góp bởi Victor Stinner trong gh-111696.)Thêm chức năng
PyType_GetModuleName()để lấy tên mô-đun của loại. Điều này tương đương với việc lấy thuộc tínhtype.__module__. (Được đóng góp bởi Eric Snow và Victor Stinner trong gh-111696.)Thêm các hàm
PyUnicode_EqualToUTF8AndSize()vàPyUnicode_EqualToUTF8()để so sánh một đối tượng Unicode với chuỗi được mã hóa const char* UTF-8 và1nếu chúng bằng nhau hoặc0nếu ngược lại. Các chức năng này không đưa ra ngoại lệ. (Được đóng góp bởi Serhiy Storchaka trong gh-110289.)Thêm hàm
PyWeakref_GetRef()thay thế choPyWeakref_GetObject()để trả về strong reference hoặcNULLnếu người giới thiệu không còn tồn tại. (Được đóng góp bởi Victor Stinner trong gh-105927.)Thêm các biến thể cố định của hàm âm thầm bỏ qua lỗi:
PyObject_HasAttrStringWithError()thay thếPyObject_HasAttrString().PyMapping_HasKeyStringWithError()thay thếPyMapping_HasKeyString().
Các hàm mới trả về
-1nếu có lỗi và1tiêu chuẩn cho giá trị đúng và0cho giá trị sai.(Được đóng góp bởi Serhiy Storchaka trong gh-108511.)
API C đã thay đổi¶
Tham số keywords của
PyArg_ParseTupleAndKeywords()vàPyArg_VaParseTupleAndKeywords()hiện có loại char *const* trong C và const char *const* trong C++, thay vì char**. Trong C++, điều này làm cho các hàm này tương thích với các đối số thuộc loại const char *const*, const char** hoặc char *const* mà không cần ép kiểu rõ ràng. Trong C, các hàm chỉ hỗ trợ các đối số kiểu char *const*. Điều này có thể được ghi đè bằng macroPY_CXX_CONST. (Được đóng góp bởi Serhiy Storchaka trong gh-65210.)PyArg_ParseTupleAndKeywords()hiện hỗ trợ tên tham số từ khóa không phải ASCII. (Được đóng góp bởi Serhiy Storchaka trong gh-110815.)Chức năng
PyCode_GetFirstFree()hiện không ổn định API và hiện được đặt tên làPyUnstable_Code_GetFirstFree(). (Được đóng góp bởi Bogdan Romanyuk trong gh-115781.)Các hàm
PyDict_GetItem(),PyDict_GetItemString(),PyMapping_HasKey(),PyMapping_HasKeyString(),PyObject_HasAttr(),PyObject_HasAttrString()vàPySys_GetObject(), mỗi hàm sẽ xóa tất cả các lỗi xảy ra khi gọi chúng, giờ đây sẽ báo cáo các lỗi này bằngsys.unraisablehook(). Bạn có thể thay thế chúng bằng các chức năng khác như được đề xuất trong tài liệu. (Được đóng góp bởi Serhiy Storchaka trong gh-106672.)Thêm hỗ trợ cho các định dạng
%T,%#T,%Nvà%#NchoPyUnicode_FromFormat():%T: Lấy tên đầy đủ của một loại đối tượng%#T: Như trên nhưng dùng dấu hai chấm làm dấu phân cách%N: Lấy tên đầy đủ của một loại%#N: Như trên nhưng dùng dấu hai chấm làm dấu phân cách
Xem PEP 737 để biết thêm thông tin. (Được đóng góp bởi Victor Stinner trong gh-111696.)
Bạn không còn phải xác định macro
PY_SSIZE_T_CLEANtrước khi bao gồmPython.hkhi sử dụng định dạng#trong format codes. Các API chấp nhận mã định dạng luôn sử dụngPy_ssize_tcho các định dạng#. (Được đóng góp bởi Inada Naoki trong gh-104922.)Nếu Python được xây dựng bằng debug mode hoặc
with assertions,PyTuple_SET_ITEM()vàPyList_SET_ITEM()bây giờ hãy kiểm tra đối số chỉ mục bằng một xác nhận. (Được đóng góp bởi Victor Stinner trong gh-106168.)
Thay đổi giới hạn C API¶
Các chức năng sau hiện được bao gồm trong Limited C API:
(Được đóng góp bởi Victor Stinner trong gh-85283 và gh-116936.)
Python được xây dựng bằng
--with-trace-refs(tham chiếu theo dõi) hiện hỗ trợ Limited API. (Được đóng góp bởi Victor Stinner trong gh-108634.)
API C đã bị xóa¶
Xóa một số hàm, macro, biến, v.v. có tên bắt đầu bằng
_Pyhoặc_PY(được coi là riêng tư). Nếu dự án của bạn bị ảnh hưởng bởi một trong những lần xóa này và bạn tin rằng API đã bị xóa vẫn có sẵn, vui lòng open a new issue yêu cầu C API công khai và thêmcc: @vstinnervào vấn đề này để thông báo cho Victor Stinner. (Được đóng góp bởi Victor Stinner trong gh-106320.)Xóa các giao thức đệm cũ không được dùng nữa trong Python 3.0. Thay vào đó hãy sử dụng Giao thức đệm.
PyObject_CheckReadBuffer(): Sử dụngPyObject_CheckBuffer()để kiểm tra xem đối tượng có hỗ trợ giao thức bộ đệm hay không. Lưu ý rằngPyObject_CheckBuffer()không đảm bảo rằngPyObject_GetBuffer()sẽ thành công. Để kiểm tra xem đối tượng có thực sự đọc được hay không, hãy xem ví dụ tiếp theo vềPyObject_GetBuffer().PyObject_AsCharBuffer(),PyObject_AsReadBuffer(): Thay vào đó hãy sử dụngPyObject_GetBuffer()vàPyBuffer_Release():Chế độ xem Py_buffer; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) { trả về NULL; } // Sử dụng `view.buf` và `view.len` để đọc từ bộ đệm. // Bạn có thể cần truyền buf thành `(const char*)view.buf`. PyBuffer_Release(&view);
PyObject_AsWriteBuffer(): Thay vào đó hãy sử dụngPyObject_GetBuffer()vàPyBuffer_Release():Chế độ xem Py_buffer; if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) { trả lại NULL; } // Sử dụng `view.buf` và `view.len` để ghi vào bộ đệm. PyBuffer_Release(&view);
(Được đóng góp bởi Inada Naoki trong gh-85275.)
Xóa các hàm khác nhau không được dùng nữa trong Python 3.9:
PyEval_CallObject(),PyEval_CallObjectWithKeywords(): Thay vào đó hãy sử dụngPyObject_CallNoArgs()hoặcPyObject_Call().Cảnh báo
Trong
PyObject_Call(), các đối số vị trí phải làtuplevà không được làNULL, đồng thời các đối số từ khóa phải làdicthoặcNULL, trong khi các hàm bị loại bỏ đã kiểm tra các loại đối số và chấp nhận các đối số từ khóa và vị tríNULL. Để thay thếPyEval_CallObjectWithKeywords(func, NULL, kwargs)bằngPyObject_Call(), hãy chuyển một bộ dữ liệu trống làm đối số vị trí bằngPyTuple_New(0).PyEval_CallFunction(): Thay vào đó hãy sử dụngPyObject_CallFunction().PyEval_CallMethod(): Thay vào đó hãy sử dụngPyObject_CallMethod().PyCFunction_Call(): Thay vào đó hãy sử dụngPyObject_Call().
(Được đóng góp bởi Victor Stinner trong gh-105107.)
Xóa các hàm cũ sau để định cấu hình khởi tạo Python, không được dùng trong Python 3.11:
PySys_AddWarnOptionUnicode(): Thay vào đó hãy sử dụngPyConfig.warnoptions.PySys_AddWarnOption(): Thay vào đó hãy sử dụngPyConfig.warnoptions.PySys_AddXOption(): Thay vào đó hãy sử dụngPyConfig.xoptions.PySys_HasWarnOptions(): Thay vào đó hãy sử dụngPyConfig.xoptions.PySys_SetPath(): Thay vào đó hãy đặtPyConfig.module_search_paths.Py_SetPath(): Thay vào đó hãy đặtPyConfig.module_search_paths.Py_SetStandardStreamEncoding(): Thay vào đó, hãy đặtPyConfig.stdio_encodingvà cũng có thể đặtPyConfig.legacy_windows_stdio(trên Windows)._Py_SetProgramFullPath(): Thay vào đó hãy đặtPyConfig.executable.
Thay vào đó, hãy sử dụng
PyConfigAPI của Python Initialization Configuration (PEP 587), được thêm vào Python 3.8. (Được đóng góp bởi Victor Stinner trong gh-105145.)Xóa các hàm
PyEval_AcquireLock()vàPyEval_ReleaseLock(), không được dùng nữa trong Python 3.2. Họ không cập nhật trạng thái chủ đề hiện tại. Chúng có thể được thay thế bằng:PyEval_AcquireThread()vàPyEval_RestoreThread()cấp thấp;hoặc
PyGILState_Ensure()vàPyGILState_Release().
(Được đóng góp bởi Victor Stinner trong gh-105182.)
Xóa hàm
PyEval_ThreadsInitialized(), không được dùng nữa trong Python 3.9. Kể từ Python 3.7,Py_Initialize()luôn tạo GIL: gọiPyEval_InitThreads()không làm gì cả vàPyEval_ThreadsInitialized()luôn trả về khác 0. (Được đóng góp bởi Victor Stinner trong gh-105182.)Xóa bí danh
_PyInterpreterState_Get()thànhPyInterpreterState_Get()được giữ để tương thích ngược với Python 3.8. pythoncapi-compat project có thể được sử dụng để tảiPyInterpreterState_Get()trên Python 3.8 trở lên. (Được đóng góp bởi Victor Stinner trong gh-106320.)Xóa chức năng
_PyObject_FastCall()riêng tư: sử dụngPyObject_Vectorcall()có sẵn kể từ Python 3.8 (PEP 590). (Được đóng góp bởi Victor Stinner trong gh-106023.)Xóa tệp tiêu đề
cpython/pytime.hchỉ chứa các chức năng riêng tư. (Được đóng góp bởi Victor Stinner trong gh-106316.)Xóa hằng số
PY_TIMEOUT_MAXkhông có giấy tờ khỏi C API bị giới hạn. (Được đóng góp bởi Victor Stinner trong gh-110014.)Xóa macro thùng rác cũ
Py_TRASHCAN_SAFE_BEGINvàPy_TRASHCAN_SAFE_END. Thay thế cả hai bằng macro mớiPy_TRASHCAN_BEGINvàPy_TRASHCAN_END. (Được đóng góp bởi Irit Katriel trong gh-105111.)
API C không được dùng nữa¶
Không dùng nữa các hàm khởi tạo Python cũ:
PySys_ResetWarnOptions(): Thay vào đó hãy xóasys.warnoptionsvàwarnings.filters.Py_GetExecPrefix(): Thay vào đó hãy nhậnsys.exec_prefix.Py_GetPath(): Thay vào đó hãy nhậnsys.path.Py_GetPrefix(): Thay vào đó hãy nhậnsys.prefix.Py_GetProgramFullPath(): Thay vào đó hãy nhậnsys.executable.Py_GetProgramName(): Thay vào đó hãy nhậnsys.executable.Py_GetPythonHome(): Thay vào đó hãy lấyPyConfig.homehoặc biến môi trườngPYTHONHOME.
(Được đóng góp bởi Victor Stinner trong gh-105145.)
Soft deprecate, các hàm
PyEval_GetBuiltins(),PyEval_GetGlobals()vàPyEval_GetLocals()sẽ trả về borrowed reference. (Phần mềm không được dùng nữa như một phần của PEP 667.)Không dùng nữa hàm
PyImport_ImportModuleNoBlock(), hàm này chỉ là bí danh củaPyImport_ImportModule()kể từ Python 3.3. (Được đóng góp bởi Victor Stinner trong gh-105396.)Soft deprecate chức năng
PyModule_AddObject(). Nó nên được thay thế bằngPyModule_Add()hoặcPyModule_AddObjectRef(). (Được đóng góp bởi Serhiy Storchaka trong gh-86493.)Không dùng nữa các loại
Py_UNICODEvàPY_UNICODE_TYPEcũ cũng như định nghĩaPy_UNICODE_WIDE. Thay vào đó hãy sử dụng loạiwchar_ttrực tiếp. Vì Python 3.3,Py_UNICODEvàPY_UNICODE_TYPEchỉ là bí danh củawchar_t. (Được đóng góp bởi Victor Stinner trong gh-105156.)Không dùng nữa các hàm
PyWeakref_GetObject()vàPyWeakref_GET_OBJECT()vốn trả về borrowed reference. Thay thế chúng bằng hàmPyWeakref_GetRef()mới, hàm này trả về strong reference. pythoncapi-compat project có thể được sử dụng để tảiPyWeakref_GetRef()trên Python 3.12 trở lên. (Được đóng góp bởi Victor Stinner trong gh-105927.)
Đang chờ xóa trong Python 3.14¶
Trường
ma_version_tagtrongPyDictObjectdành cho các mô-đun mở rộng (PEP 699; gh-101193).Tạo
immutable typesvới các cơ sở có thể thay đổi (gh-95388).
Đ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 thay đổi¶
arm64-apple-iosvàarm64-apple-ios-simulatorhiện đều là nền tảng PEP 11 cấp 3. (PEP 730 được viết và triển khai bởi Russell Keith-Magee trong gh-114099.)aarch64-linux-androidvàx86_64-linux-androidhiện đều là nền tảng PEP 11 cấp 3. (PEP 738 được viết và triển khai bởi Malcolm Smith trong gh-116622.)wasm32-wasihiện là nền tảng PEP 11 cấp 2. (Được đóng góp bởi Brett Cannon trong gh-115192.)wasm32-emscriptenkhông còn là nền tảng được hỗ trợ PEP 11 nữa. (Được đóng góp bởi Brett Cannon trong gh-115192.)Việc xây dựng CPython hiện yêu cầu trình biên dịch có hỗ trợ thư viện nguyên tử C11, các hàm nguyên tử tích hợp sẵn GCC hoặc nội tại khóa liên động MSVC.
Hiện cần có Autoconf 2.71 và aclocal 1.16.5 để tạo lại tập lệnh
configure. (Được đóng góp bởi Christian Heimes trong gh-89886 và bởi Victor Stinner trong gh-112090.)Cần có SQLite 3.15.2 hoặc mới hơn để xây dựng mô-đun mở rộng
sqlite3. (Được đóng góp bởi Erlend Aasland trong gh-105875.)CPython hiện gói mimalloc library theo mặc định. Nó được cấp phép theo giấy phép MIT; xem mimalloc license. Mimalloc đi kèm có các thay đổi tùy chỉnh, xem gh-113141 để biết chi tiết. (Được đóng góp bởi Dino Viehland trong gh-109914.)
Tùy chọn
configure--with-system-libmpdechiện được mặc định làyes. Bản sao đi kèm củalibmpdecsẽ bị xóa trong Python 3.16.Python được xây dựng bằng
configure--with-trace-refs(tài liệu tham khảo theo dõi) hiện tương thích với ABI với bản phát hành Python và debug build. (Được đóng góp bởi Victor Stinner trong gh-108634.)Trên hệ thống POSIX, tên tệp pkg-config (
.pc) hiện bao gồm các cờ ABI. Ví dụ: bản dựng theo luồng tự do tạo rapython-3.13t.pcvà bản dựng gỡ lỗi tạo rapython-3.13d.pc.Các tiện ích mở rộng
errno,fcntl,grp,md5,pwd,resource,termios,winsound,_ctypes_test,_multiprocessing.posixshmem,_scproxy,_stat,_statistics,_testconsole,_testimportmultiplevà_uuidC hiện đã được xây dựng với limited C API. (Được đóng góp bởi Victor Stinner trong gh-85283.)
Chuyển sang Python 3.13¶
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¶
PEP 667 giới thiệu một số thay đổi về ngữ nghĩa của
locals()vàf_locals:Việc gọi
locals()trong optimized scope hiện tạo ra một ảnh chụp nhanh độc lập trên mỗi cuộc gọi và do đó không còn cập nhật ngầm các tham chiếu được trả về trước đó nữa. Để có được hành vi CPython cũ hiện yêu cầu các lệnh gọi rõ ràng để cập nhật từ điển được trả về ban đầu với kết quả của các lệnh gọi tiếp theo tớilocals(). Các hàm thực thi mã nhắm mục tiêu ngầm đếnlocals()(chẳng hạn nhưexecvàeval) phải được chuyển qua một không gian tên rõ ràng để truy cập kết quả của chúng trong phạm vi được tối ưu hóa. (Đã thay đổi như một phần của PEP 667.)Gọi
locals()từ phần hiểu ở phạm vi mô-đun hoặc lớp (bao gồm thông quaexechoặceval) một lần nữa hoạt động như thể phần hiểu đang chạy như một hàm lồng nhau độc lập (tức là không bao gồm các biến cục bộ từ phạm vi chứa). Trong Python 3.12, điều này đã thay đổi để bao gồm các biến cục bộ từ phạm vi chứa khi triển khai PEP 709. (Đã thay đổi như một phần của PEP 667.)Việc truy cập
FrameType.f_localstrong optimized scope hiện trả về proxy ghi thay vì ảnh chụp nhanh được cập nhật vào những thời điểm không xác định. Nếu muốn có một ảnh chụp nhanh, nó phải được tạo một cách rõ ràng bằngdicthoặc phương thức.copy()của proxy. (Đã thay đổi như một phần của PEP 667.)
functools.partialhiện phát raFutureWarningkhi được sử dụng làm phương thức. Hành vi sẽ thay đổi trong các phiên bản Python trong tương lai. 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 trong gh-121027.)Một
OSErrorhiện đượcgetpass.getuser()đưa ra nếu không truy xuất được tên người dùng, thay vìImportErrortrên nền tảng không phải Unix hoặcKeyErrortrên nền tảng Unix nơi cơ sở dữ liệu mật khẩu trống.Giá trị của thuộc tính
modecủagzip.GzipFilehiện là một chuỗi ('rb'hoặc'wb') thay vì một số nguyên (1hoặc2). Giá trị của thuộc tínhmodecủa đối tượng giống tệp có thể đọc được trả về bởizipfile.ZipFile.open()hiện là'rb'thay vì'r'. (Được đóng góp bởi Serhiy Storchaka trong gh-115961.)mailbox.Maildirhiện bỏ qua các tệp có dấu chấm ở đầu (.). (Được đóng góp bởi Zackery Spytz trong gh-65559.)pathlib.Path.glob()vàrglob()hiện trả về cả tệp và thư mục nếu mẫu kết thúc bằng "**" được cung cấp, thay vì chỉ thư mục. Thêm dấu gạch chéo ở cuối để giữ nguyên hành vi trước đó và chỉ khớp các thư mục.Mô-đun
threadinghiện mong đợi mô-đun_threadcó chức năng_is_main_interpreter(). Hàm này không có đối số và trả vềTruenếu trình thông dịch hiện tại là trình thông dịch chính.Bất kỳ thư viện hoặc ứng dụng nào cung cấp mô-đun
_threadtùy chỉnh đều phải cung cấp_is_main_interpreter(), giống như các thuộc tính "riêng tư" khác của mô-đun. (gh-112826.)
Những thay đổi trong C API¶
Python.hkhông còn bao gồm tiêu đề chuẩn<ieeefp.h>nữa. Nó được bao gồm cho chức năngfinite()hiện được cung cấp bởi tiêu đề<math.h>. Bây giờ nó sẽ được đưa vào một cách rõ ràng nếu cần. Loại bỏ macroHAVE_IEEEFP_H. (Được đóng góp bởi Victor Stinner trong gh-108765.)Python.hkhông còn bao gồm các tệp tiêu đề tiêu chuẩn sau:<time.h>,<sys/select.h>và<sys/time.h>. Nếu cần, bây giờ chúng sẽ được đưa vào một cách rõ ràng. Ví dụ:<time.h>cung cấp các hàmclock()vàgmtime(),<sys/select.h>cung cấp hàmselect()và<sys/time.h>cung cấp các hàmfutimes(),gettimeofday()vàsetitimer(). (Được đóng góp bởi Victor Stinner trong gh-108765.)Trên Windows,
Python.hkhông còn bao gồm tệp tiêu đề chuẩn<stddef.h>nữa. Nếu cần, bây giờ nó sẽ được đưa vào một cách rõ ràng. Ví dụ: nó cung cấp chức năngoffsetof()và các loạisize_tvàptrdiff_t. Tất cả các nền tảng khác đều cần bao gồm<stddef.h>một cách rõ ràng, macroHAVE_STDDEF_Hchỉ được xác định trên Windows. (Được đóng góp bởi Victor Stinner trong gh-108765.)Nếu macro
Py_LIMITED_APIđược xác định thì các macroPy_BUILD_CORE,Py_BUILD_CORE_BUILTINvàPy_BUILD_CORE_MODULEhiện không được xác định bởi<Python.h>. (Được đóng góp bởi Victor Stinner trong gh-85283.)Các macro thùng rác
Py_TRASHCAN_SAFE_BEGINvàPy_TRASHCAN_SAFE_ENDcũ đã bị xóa. Chúng nên được thay thế bằng macro mớiPy_TRASHCAN_BEGINvàPy_TRASHCAN_END.Hàm
tp_dealloccó các macro cũ, chẳng hạn như:khoảng trống tĩnh mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
nên di chuyển sang các macro mới như sau:
khoảng trống tĩnh mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_BEGIN(p, mytype_dealloc) ... Py_TRASHCAN_END }
Lưu ý rằng
Py_TRASHCAN_BEGINcó đối số thứ hai sẽ là hàm phân bổ mà nó có trong đó. Các macro mới đã được thêm vào Python 3.8 và các macro cũ không được dùng nữa trong Python 3.11. (Được đóng góp bởi Irit Katriel trong gh-105111.)
PEP 667 giới thiệu một số thay đổi đối với các chức năng liên quan đến khung:
Tác động của việc thay đổi từ điển được trả về từ
PyEval_GetLocals()trong optimized scope đã thay đổi. Các mục nhập lệnh mới được thêm theo cách này giờ đây sẽ only hiển thị với các lệnh gọiPyEval_GetLocals()tiếp theo trong khung đó, vìPyFrame_GetLocals(),locals()vàFrameType.f_localskhông còn truy cập vào cùng một từ điển được lưu trong bộ nhớ đệm cơ bản nữa. Những thay đổi được thực hiện đối với các mục nhập tên biến thực tế và tên được thêm thông qua giao diện proxy ghi qua sẽ bị ghi đè trong các lệnh gọi tiếp theo tớiPyEval_GetLocals()trong khung đó. Cập nhật mã được đề xuất tùy thuộc vào cách sử dụng chức năng, vì vậy hãy tham khảo thông báo ngừng sử dụng chức năng để biết chi tiết.Việc gọi
PyFrame_GetLocals()trong optimized scope hiện trả về proxy ghi thay vì ảnh chụp nhanh được cập nhật vào những thời điểm không xác định. Nếu muốn có một ảnh chụp nhanh, nó phải được tạo một cách rõ ràng (ví dụ: vớiPyDict_Copy()) hoặc bằng cách gọiPyEval_GetFrameLocals()API mới.PyFrame_FastToLocals()vàPyFrame_FastToLocalsWithError()không còn tác dụng nữa. Việc gọi các hàm này đã trở nên dư thừa kể từ Python 3.11, khiPyFrame_GetLocals()được giới thiệu lần đầu tiên.PyFrame_LocalsToFast()không còn tác dụng nữa. Việc gọi hàm này bây giờ là dư thừa vìPyFrame_GetLocals()trả về proxy ghi cho optimized scopes.
Python 3.13 đã loại bỏ nhiều chức năng riêng tư. Một số trong số chúng có thể được thay thế bằng các lựa chọn thay thế sau:
_PyDict_Pop():PyDict_Pop()hoặcPyDict_PopString();_PyDict_GetItemWithError():PyDict_GetItemRef();_PyErr_WriteUnraisableMsg():PyErr_FormatUnraisable();_PyEval_SetTrace():PyEval_SetTrace()hoặcPyEval_SetTraceAllThreads();_PyList_Extend():PyList_Extend();_PyLong_AsInt():PyLong_AsInt();_PyMem_RawStrdup():strdup();_PyMem_Strdup():strdup();_PyObject_ClearManagedDict():PyObject_ClearManagedDict();_PyObject_VisitManagedDict():PyObject_VisitManagedDict();_PyThreadState_UncheckedGet():PyThreadState_GetUnchecked();_PyTime_AsSecondsDouble():PyTime_AsSecondsDouble();_PyTime_GetMonotonicClock():PyTime_Monotonic()hoặcPyTime_MonotonicRaw();_PyTime_GetPerfCounter():PyTime_PerfCounter()hoặcPyTime_PerfCounterRaw();_PyTime_GetSystemClock():PyTime_Time()hoặcPyTime_TimeRaw();_PyTime_MAX:PyTime_MAX;_PyTime_MIN:PyTime_MIN;_PyTime_t:PyTime_t;_Py_HashPointer():Py_HashPointer();_Py_IsFinalizing():Py_IsFinalizing().
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.12 trở lên.
Thay đổi kiểm tra hồi quy¶
Python được xây dựng bằng
configure--with-pydebughiện hỗ trợ tùy chọn dòng lệnh-X presite=package.module. Nếu được sử dụng, nó sẽ chỉ định một mô-đun cần được nhập sớm trong vòng đời của trình thông dịch, trước khisite.pyđược thực thi. (Được đóng góp bởi Łukasz Langa trong gh-110769.)