Python đã có các trình định dạng chuỗi tuyệt vời trong nhiều năm nhưng tài liệu về chúng quá lý thuyết và kỹ thuật. Với trang web này, chúng tôi cố gắng hiển thị cho bạn các trường hợp sử dụng phổ biến nhất được bao phủ bởi API định dạng chuỗi kiểu cũ và kiểu mới với các ví dụ thực tế
Tất cả các ví dụ trên trang này đều hoạt động hiệu quả với Python 2. 7, 3. 2, 3. 3, 3. 4 và 3. 5 mà không yêu cầu bất kỳ thư viện bổ sung nào
Thông tin chi tiết về hai phương pháp định dạng này có thể được tìm thấy trong tài liệu Python chính thức
Nếu bạn muốn đóng góp thêm ví dụ, vui lòng tạo yêu cầu kéo trên Github
Mục lục
Định dạng cơ bản
Định dạng vị trí đơn giản có lẽ là trường hợp sử dụng phổ biến nhất. Sử dụng nó nếu thứ tự các đối số của bạn không có khả năng thay đổi và bạn chỉ có rất ít phần tử muốn nối
Vì các phần tử không được biểu thị bằng thứ gì đó mang tính mô tả như tên nên kiểu đơn giản này chỉ nên được sử dụng để định dạng một số phần tử tương đối nhỏ
Mới
'{} {}'.format('one', 'two')
Với định dạng kiểu mới, có thể (và trong Python 2. 6 thậm chí bắt buộc) để cung cấp cho trình giữ chỗ một chỉ mục vị trí rõ ràng
Điều này cho phép sắp xếp lại thứ tự hiển thị mà không thay đổi các đối số
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two')
chuyển đổi giá trị
Trình định dạng đơn giản kiểu mới theo mặc định gọi phương thức '{0!s} {0!r}'.format(Data()) 1 của một đối tượng để biểu diễn nó. Nếu bạn chỉ muốn hiển thị đầu ra của '{0!s} {0!r}'.format(Data()) 2 hoặc '{0!s} {0!r}'.format(Data()) 3, bạn có thể sử dụng cờ chuyển đổi '{0!s} {0!r}'.format(Data()) 4 hoặc '{0!s} {0!r}'.format(Data()) 5
Trong %-style, bạn thường sử dụng '{0!s} {0!r}'.format(Data()) 6 để biểu diễn chuỗi nhưng có '{0!s} {0!r}'.format(Data()) 7 cho chuyển đổi '{0!s} {0!r}'.format(Data()) 3
Thành lập
'{1} {0}'.format('one', 'two') 0
Mới
'{0!s} {0!r}'.format(Data())
Trong Python 3 tồn tại một cờ chuyển đổi bổ sung sử dụng đầu ra của '{0!s} {0!r}'.format(Data()) 3 nhưng thay vào đó sử dụng '{1} {0}'.format('one', 'two') 30
Thành lập
'{1} {0}'.format('one', 'two') 3
Mới
'{1} {0}'.format('one', 'two') 5
Đệm và căn chỉnh chuỗi
Theo mặc định, các giá trị được định dạng để chỉ chiếm bao nhiêu ký tự cần thiết để thể hiện nội dung. Tuy nhiên, cũng có thể xác định rằng một giá trị phải được đệm theo một độ dài cụ thể
Thật không may, căn chỉnh mặc định khác nhau giữa định dạng kiểu cũ và kiểu mới. Kiểu cũ mặc định căn phải trong khi kiểu mới căn trái
Sắp xếp đúng
Một lần nữa, định dạng kiểu mới vượt qua biến thể cũ bằng cách cung cấp nhiều quyền kiểm soát hơn đối với cách các giá trị được đệm và căn chỉnh
Bạn có thể chọn ký tự đệm
Thao tác này không khả dụng với định dạng kiểu cũ
Và cả các giá trị căn giữa
Thao tác này không khả dụng với định dạng kiểu cũ
Khi sử dụng căn giữa mà độ dài của chuỗi dẫn đến sự phân chia không đều của các ký tự đệm, ký tự thừa sẽ được đặt ở bên phải
Thao tác này không khả dụng với định dạng kiểu cũ
Kết hợp cắt ngắn và đệm
Cũng có thể kết hợp cắt xén và đệm
Mới
'{1} {0}'.format('one', 'two') 6
số
Tất nhiên nó cũng có thể định dạng số
số nguyên
Cũ
'{1} {0}'.format('one', 'two') 7
Mới
'{1} {0}'.format('one', 'two') 8
Số đệm
Tương tự như chuỗi, số cũng có thể bị giới hạn ở một chiều rộng cụ thể
Một lần nữa, tương tự như việc cắt ngắn các chuỗi, độ chính xác cho các số dấu phẩy động giới hạn số lượng vị trí sau dấu thập phân
Đối với các dấu phẩy động, giá trị đệm biểu thị độ dài của đầu ra hoàn chỉnh. Trong ví dụ bên dưới, chúng tôi muốn đầu ra của mình có ít nhất 6 ký tự với 2 sau dấu thập phân
Cũ
'{1} {0}'.format('one', 'two') 9
Mới
'{1} {0}'.format('one', 'two') 0
Đối với các giá trị số nguyên cung cấp độ chính xác không có nhiều ý nghĩa và thực sự bị cấm theo kiểu mới (nó sẽ dẫn đến ValueError)
Số đã ký
Theo mặc định, chỉ các số âm mới có tiền tố là dấu. Điều này có thể được thay đổi tất nhiên
Sử dụng ký tự khoảng trắng để cho biết rằng các số âm phải được thêm vào trước ký hiệu dấu trừ và dấu cách ở đầu nên được sử dụng cho các số dương
Định dạng kiểu mới cũng có thể kiểm soát vị trí của ký hiệu ký hiệu so với phần đệm
Thao tác này không khả dụng với định dạng kiểu cũ
Trình giữ chỗ được đặt tên
Cả hai kiểu định dạng đều hỗ trợ trình giữ chỗ có tên
Thành lập
'{1} {0}'.format('one', 'two') 1
Mới
'{1} {0}'.format('one', 'two') 2
'{1} {0}'.format('one', 'two') 31 cũng chấp nhận đối số từ khóa
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two') 3
Getitem và Getattr
Định dạng kiểu mới cho phép linh hoạt hơn trong việc truy cập các cấu trúc dữ liệu lồng nhau
Nó hỗ trợ truy cập các vùng chứa hỗ trợ '{1} {0}'.format('one', 'two') 32 như từ điển và danh sách chẳng hạn
Thao tác này không khả dụng với định dạng kiểu cũ
Thành lập
'{1} {0}'.format('one', 'two') 4
Mới
'{1} {0}'.format('one', 'two') 5
Mới
'{1} {0}'.format('one', 'two') 6
Cũng như truy cập các thuộc tính trên các đối tượng thông qua '{1} {0}'.format('one', 'two') 33
Thao tác này không khả dụng với định dạng kiểu cũ
Thành lập
'{1} {0}'.format('one', 'two') 7
Mới
'{1} {0}'.format('one', 'two') 8
Cả hai loại quyền truy cập có thể được trộn lẫn tự do và lồng nhau tùy ý
Thao tác này không khả dụng với định dạng kiểu cũ
Thành lập
'{1} {0}'.format('one', 'two') 9
Mới
'{1} {0}'.format('one', 'two') 00
định dạng tham số
Ngoài ra, định dạng kiểu mới cho phép tất cả các thành phần của định dạng được chỉ định động bằng cách sử dụng tham số hóa. Định dạng tham số hóa là các biểu thức lồng nhau trong dấu ngoặc nhọn có thể xuất hiện ở bất kỳ đâu trong định dạng gốc sau dấu hai chấm
Định dạng kiểu cũ cũng hỗ trợ một số tham số hóa nhưng hạn chế hơn nhiều. Cụ thể là nó chỉ cho phép tham số hóa chiều rộng và độ chính xác của đầu ra
Căn chỉnh tham số và chiều rộng
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two') 01
Cũ
'{1} {0}'.format('one', 'two') 02
Mới
'{1} {0}'.format('one', 'two') 03
Mới
'{1} {0}'.format('one', 'two') 04
Định dạng lồng nhau có thể được sử dụng để thay thế bất kỳ phần nào của thông số định dạng, do đó, ví dụ chính xác ở trên có thể được viết lại thành
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two') 05
Các định dạng lồng nhau có thể là đối số vị trí. Vị trí phụ thuộc vào thứ tự của dấu ngoặc nhọn mở
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two') 06
Và tất nhiên, các đối số từ khóa có thể được thêm vào hỗn hợp như trước đây
Thao tác này không khả dụng với định dạng kiểu cũ
Mới
'{1} {0}'.format('one', 'two') 07
đối tượng tùy chỉnh
Ví dụ về ngày giờ hoạt động thông qua việc sử dụng phương pháp ma thuật '{0!s} {0!r}'.format(Data()) 1. Bạn có thể xác định xử lý định dạng tùy chỉnh trong các đối tượng của riêng mình bằng cách ghi đè phương thức này. Điều này cho phép bạn kiểm soát hoàn toàn cú pháp định dạng được sử dụng