# Công cụ định dạng Python

URL: https://discuvr.org/python-formatter/?hl=vi
Last updated: 2026-11-07
MCP tool: `format_python`

Dán Python và Black sẽ định dạng theo độ dài dòng và tùy chọn của bạn. Lỗi cú pháp chỉ rõ dòng. Mã không bao giờ được chạy hay lưu lại.

Công cụ này chạy Black - bộ định dạng mà hầu hết các dự án Python đã đồng thuận sử dụng - trên những gì bạn dán vào, với độ dài dòng và cách xử lý dấu ngoặc kép mà bạn chọn. Nếu tệp không phân tích được, nó cho biết ở dòng nào, và nếu tệp đã được định dạng sẵn, nó cũng cho biết điều đó, thay vì giả vờ đã làm gì đó.

## Chức năng

- Định dạng Black ở 79, 88, 100 hoặc 120 cột.
- Chế độ "chỉ kiểm tra": biết được một tệp có thay đổi hay không mà không thay đổi nó.
- Giữ nguyên kiểu dấu ngoặc kép của riêng bạn, hoặc để Black chuẩn hóa nó.
- Tuân theo hoặc bỏ qua dấu phẩy cuối kỳ diệu giữ cho một tập hợp luôn được mở rộng.
- Nhắm đến một phiên bản Python cụ thể khi cú pháp nhạy cảm với phiên bản.
- Lỗi cú pháp báo cáo dòng, cột và đoạn mã xung quanh.
- Báo cáo có bao nhiêu dòng đã được thêm và xóa, cùng với hình dạng của tệp.

## Cách thức hoạt động

1. Dán mã, hoặc cả một tệp.
2. Chọn một độ dài dòng và bất kỳ tùy chọn nào bạn quan tâm.
3. Nhấn Định dạng, sau đó sao chép hoặc tải xuống kết quả.

## Mã của bạn không bao giờ được chạy

Định dạng Python không yêu cầu chạy nó. Mã được phân tích thành một cây cú pháp và được viết lại từ cây đó, hoàn toàn trong bộ nhớ - nó không bao giờ được viết vào tệp, không bao giờ được nhập và không bao giờ được chạy. Một bộ định dạng chạy những gì bạn dán vào sẽ là một shell từ xa với một hộp văn bản.

## Vì sao là Black, không phải một ý kiến của riêng chúng tôi

Black là một phép biến đổi bảo toàn AST: mã đầu ra là cùng một chương trình với mã đầu vào. Thuộc tính đó là toàn bộ lý do một bộ định dạng có thể được tin tưởng, và đó là lý do không có mô hình ngôn ngữ nào tham gia vào bất kỳ phần nào của công cụ này. Một mô hình được yêu cầu dọn dẹp mã đôi khi sẽ viết lại một dòng trong khi làm việc đó, và một thay đổi âm thầm đối với mã đang hoạt động là thất bại duy nhất mà một bộ định dạng không thể chấp nhận.

## Chỉ kiểm tra

Cùng câu hỏi mà CI đặt ra: tệp này có thay đổi không? Chế độ kiểm tra trả lại mã gốc của bạn không bị thay đổi và báo cáo liệu Black có định dạng lại nó hay không, và bao nhiêu dòng. Đây là cách nhanh để tìm ra tại sao một pipeline đang thất bại trên một tệp mà bạn không thể tái tạo cục bộ.

## Dấu phẩy magic ở cuối và fmt: off, ví dụ minh họa

Dấu phẩy sau phần tử cuối báo cho Black giữ lời gọi hoặc tập hợp ở dạng mỗi phần tử một dòng: result = compute(alpha, beta,) trả về thành bốn dòng, alpha, và beta, mỗi cái nằm trên một dòng riêng. Đánh dấu Bỏ qua dấu phẩy magic ở cuối thì cùng đầu vào đó trở thành result = compute(alpha, beta) khi vừa độ dài dòng. Để bảo vệ một khối căn chỉnh bằng tay, như một ma trận, đặt # fmt: off ở dòng phía trên và # fmt: on ở phía dưới; Black giữ nguyên mọi thứ ở giữa đúng như bạn viết. # fmt: skip ở cuối dòng chỉ bảo vệ dòng đó. Đây là chú thích của chính Black, nên vẫn có tác dụng khi CI của dự án chạy Black.

## Câu hỏi

**Mã của tôi có được tải lên hay lưu trữ không?**

Nó được gửi đến máy chủ, được định dạng trong bộ nhớ và trả về trong cùng một phản hồi. Không có gì được viết vào đĩa, lưu vào bộ nhớ đệm hoặc ghi nhật ký, và bản ghi sử dụng chỉ giữ số lượng - kích thước, tùy chọn, bao nhiêu dòng đã thay đổi - không bao giờ là mã.

**Việc định dạng có thay đổi những gì mã của tôi làm không?**

Không. Black thay đổi cách trình bày, không thay đổi hành vi, nhưng nó làm nhiều hơn việc dịch chuyển khoảng trắng. Nó bỏ dấu ngoặc thừa (x = (1) thành x = 1), viết thường tiền tố và số mũ của số (0XABCDEF thành 0xABCDEF, 1E5 thành 1e5), thêm dấu phẩy cuối khi tách một lời gọi ra nhiều dòng, rút gọn các chuỗi dòng trống và cắt khoảng trắng bên trong docstring (""" Doc. """ thành """Doc."""). Thay đổi cuối này làm khác nội dung __doc__, điều chỉ quan trọng nếu mã của bạn đọc docstring của chính nó.

**Tại sao tệp của tôi hoàn toàn không được định dạng lại?**

Vì nó đã được định dạng ở độ dài dòng bạn chọn. Công cụ này nói "đã được định dạng" thay vì âm thầm trả về một bản sao.

**Nó có sắp xếp các import của tôi không?**

Không. Sắp xếp import là việc của isort, không phải Black, và hai công cụ này đủ thường xuyên không đồng ý để việc làm điều đó ở đây sẽ khiến bạn ngạc nhiên.

**Nó có thể định dạng một tệp có lỗi cú pháp không?**

Không bộ định dạng nào có thể - một tệp không thể phân tích không có cấu trúc để viết lại. Bạn nhận được dòng, cột và mã xung quanh để có thể sửa nó và thử lại.

**Nó có tuân theo PEP 8 không?**

Black tương thích với PEP 8 với một sai lệch nổi tiếng: độ dài dòng mặc định của nó là 88 thay vì 79. Chọn 79 trong bộ chọn độ dài dòng nếu bạn cần con số nghiêm ngặt hơn.

**Tôi có thể định dạng tệp lớn đến mức nào?**

Tối đa 400.000 ký tự mỗi lần chạy. Việc định dạng dừng sau 10 giây, mức chỉ các tệp rất lớn hoặc lặp lại nhiều mới chạm tới, và mỗi địa chỉ IP có thể định dạng 30 lần trong 10 phút.

**Làm sao để có cùng định dạng trong trình soạn thảo, pre-commit hoặc CI?**

Trang này chạy Black, và phiên bản của nó hiển thị ở đầu trang trên màn hình rộng. Black đọc cấu hình dự án từ pyproject.toml trong mục [tool.black], dùng tên dài của các tùy chọn: line-length = 88 cho "Độ dài dòng" bạn đã chọn, skip-string-normalization = true nếu bạn đánh dấu "Giữ nguyên dấu ngoặc của tôi", skip-magic-trailing-comma = true cho "Bỏ qua dấu phẩy magic ở cuối" và target-version = ["py311"] cho giá trị cố định ở "Mục tiêu". Plugin trình soạn thảo và hook pre-commit đọc cùng tệp đó. Chạy black . để định dạng và black --check --diff . trong CI: lệnh không thay đổi gì và thoát với mã 1 khi có tệp sẽ bị định dạng lại. Hãy ghim cùng phiên bản Black với trang này, vì bản phát hành đầu tiên của mỗi năm dương lịch có thể thay đổi kiểu ổn định.

**Kết quả có giống trình định dạng của Ruff (ruff format) không?**

Gần như luôn giống, nhưng không giống từng byte. Trình định dạng của Ruff được thiết kế để thay thế trực tiếp Black, và tài liệu của Ruff cho biết trên các dự án lớn đã định dạng bằng Black như Django và Zulip, hơn 99,9% số dòng ra giống hệt. Nó khác nhiều hơn với mã chưa từng qua Black, nhất là chú thích cuối dòng, và tài liệu của nó liệt kê các điểm khác biệt có chủ ý. Độ dài dòng mặc định của nó cũng là 88, đặt bằng line-length trong [tool.ruff]; quote-style = "preserve" trong [tool.ruff.format] tương ứng với "Giữ nguyên dấu ngoặc của tôi" và skip-magic-trailing-comma = true tương ứng với "Bỏ qua dấu phẩy magic ở cuối". Nếu CI của bạn chạy ruff format --check, hãy kiểm tra tệp bằng Ruff, không phải bằng trang này.

## Thêm trong Công cụ lập trình

- [Trình xem HTML](https://discuvr.org/html-viewer/?hl=vi)
- [Máy tính Subnet IP](https://discuvr.org/ip-subnet-calculator/?hl=vi)
- [Mã hóa / Giải mã](https://discuvr.org/encode-decode/?hl=vi)
- [Chuyển đổi dấu thời gian Unix](https://discuvr.org/timestamp-converter/?hl=vi)

## Thường dùng cùng

- [So sánh văn bản](https://discuvr.org/text-diff/?hl=vi)
- [Chuyển đổi kiểu chữ & công cụ dòng](https://discuvr.org/case-converter/?hl=vi)
- [Study Buddy](https://discuvr.org/study-buddy/?hl=vi)

---

Part of Discuvr (https://discuvr.org/): Discuvr is a collection of free, focused tools for day-to-day professional work - office and data utilities, legal and compliance helpers, privacy and security checks, and developer formatters. Every tool has its own page, and most can also be called from ChatGPT or Claude over MCP.
