Booleans được định dạng trong Chuỗi trong Python như thế nào?


170

Tôi thấy tôi không thể làm:

"%b %b" % (True, False)

trong Python. Tôi đoán %bcho b (oolean). Có một cái gì đó như thế này?


1
Bạn muốn kết quả là gì? Đúng và sai? Bạn muốn '% s' rồi. % b, khi nó tồn tại, là cho nhị phân (như trong cơ sở-2).
Thomas Wouters

1
Hồ vâng! "% s" dường như chỉ hoạt động tốt. Trả lời câu hỏi này và nhận được một câu trả lời. Tôi đã từng làm "% s"% str (Sai). Thật xấu hổ cho tôi :)
Juanjo Conti

3
liên kết đến tài liệu liên quan: docs.python.org/library/...
mechanical_meat

Câu trả lời:


247
>>> print "%r, %r" % (True, False)
True, False

Điều này không đặc trưng cho các giá trị boolean - %rgọi __repr__phương thức trên đối số. %s(cho str) cũng nên làm việc.


2
Sự khác biệt chính giữa %rvà là %sgì?
Alston

22
Tôi luôn có sự phân biệt này trong đầu, nhưng hãy sửa tôi nếu tôi sai. % s (và do đó str ()) nhằm mục đích đại diện cho đối tượng trong suốt nhất có thể cho con người. % r (và do đó repr ()) nhằm mục đích đại diện cho đối tượng trong suốt nhất có thể cho python. Ví dụ, print(str("foo"))chỉ in footrên một dòng mới. print(repr("foo"))tuy nhiên in 'foo'trên một dòng mới, bao gồm cả dấu ngoặc kép, vì đó là những gì bạn cần nhập vào trình thông dịch python để có được đối tượng tương ứng với đối số trong python.
bobismijnnaam

66

Nếu bạn muốn True Falsesử dụng:

"%s %s" % (True, False)

str(True)'True'str(False)'False'.

hoặc nếu bạn muốn 1 0sử dụng:

"%i %i" % (True, False)

int(True)1int(False)0.


18

Bạn cũng có thể sử dụng lớp Formatter của chuỗi

print "{0} {1}".format(True, False);
print "{0:} {1:}".format(True, False);
print "{0:d} {1:d}".format(True, False);
print "{0:f} {1:f}".format(True, False);
print "{0:e} {1:e}".format(True, False);

Đây là những kết quả

True False
True False
1 0
1.000000 0.000000
1.000000e+00 0.000000e+00

Một số %chỉ định loại -format ( %r, %i) không khả dụng. Để biết chi tiết, xem Đặc tả định dạng Mini-Language


4
Lưu ý rằng việc thêm các tùy chọn định dạng có thể làm hỏng việc này. Ví dụ {:_^5}sẽ nhận được bạn '__1__'trừ khi bạn str(...)booleans.
Michael - Clay Shirky ở đâu

2
Bạn có thể nhận được xung quanh những vấn đề với loại chuyển đổi như !s: '{!s:_^5}'.format(True)'True_'
Michael - đâu Clay Shirky

4

Để cập nhật cái này cho Python-3, bạn có thể làm điều này

"{} {}".format(True, False)

Tuy nhiên, nếu bạn thực sự muốn định dạng chuỗi (ví dụ: thêm khoảng trắng), bạn bắt gặp Python chuyển boolean vào giá trị C bên dưới (ví dụ: int), vd

>>> "{:<8} {}".format(True, False)
'1        False'

Để giải quyết vấn đề này, bạn có thể tạo Truethành một chuỗi, vd

>>> "{:<8} {}".format(str(True), False)
'True     False'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.