2012-09-12 33 views
83

Trong Python như vẫn có hai cách khác nhau để tạo ra định dạng đầu ra:Cách in bằng Python: với dạng 'định dạng' hoặc phần trăm?

user = "Alex" 
number = 38746 
print("%s asked %d questions on stackoverflow.com" % (user, number)) 
print("{0} asked {1} questions on stackoverflow.com".format(user, number)) 

Có một cách để được ưa thích hơn người kia? Chúng tương đương, sự khác biệt là gì? Dạng nào nên được sử dụng, đặc biệt là cho Python3?

Trả lời

85

Sử dụng phương thức format, đặc biệt nếu bạn lo ngại về Python 3 và tương lai. Từ the documentation:

Các hoạt động định dạng được mô tả ở đây [% thay thế] đã lỗi thời và có thể biến mất trong các phiên bản tương lai của Python. Sử dụng định dạng chuỗi mới trong mã mới.

+14

Tài liệu mới nói điều này về toán tử phần trăm: "Các hoạt động định dạng được mô tả ở đây thể hiện một loạt các quirks dẫn đến một số lỗi phổ biến ... "nhưng không được dùng **. http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting – guettli

+2

Nó không được chính thức ngừng sử dụng, nhưng bạn được khuyến khích không sử dụng nó. – BrenBarn

+1

Related: http://bugs.python.org/issue14123 – guettli

5

The docs nói rằng phương pháp format được ưu tiên cho mã mới. Hiện tại, không có kế hoạch xóa% định dạng.

18

.format được giới thiệu vào python2.6

Nếu bạn cần khả năng tương thích ngược với Python trước đó, bạn nên sử dụng %

Đối Python3 và mới hơn, bạn nên sử dụng .format chắc chắn

.format mạnh mẽ hơn hơn %. Việc chuyển số % thành .format thật dễ dàng, nhưng cách thức vòng khác có thể không tầm thường

+0

làm thế nào là nó mạnh hơn? – yossi

+4

@yossi Đây là một ví dụ http://stackoverflow.com/a/3228928/174728. Nó cũng cho phép bạn thực hiện tìm kiếm khóa/chỉ mục 'nhập sys ; "{[version]}" định dạng (vars (sys)) ' –

+2

làm thế nào về: ' nhập sys; "% (phiên bản) s"% (vars (sys)) ' – Pax0r

6

Bạn có thể sử dụng cả hai. Không ai nói% biểu thức định dạng không được chấp nhận. Tuy nhiên, như đã nêu trước cuộc gọi phương thức định dạng mạnh hơn một chút. Cũng lưu ý rằng các biểu thức% là ngắn gọn hơn và dễ dàng hơn để mã.Hãy thử chúng và xem những gì phù hợp với bạn tốt nhất

+0

Có thể đáng chú ý rằng module 'logging' sử dụng cú pháp'% ', vì vậy nó có thể được ưu tiên vì các lý do nhất quán. – sshilovsky

Các vấn đề liên quan