2010-02-13 133 views
120

我知道我不能這樣做:布爾如何在Python中格式化布爾值?

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

。我猜測%b爲b(oolean)。有沒有這樣的事情?

+1

你想得到的結果是什麼?真假?那麼你想要'%s'。 %b,當它存在時,用於二進制(如在基數2中)。 – 2010-02-13 22:05:39

+0

何是的! 「%s」似乎工作得很好。回答這個問題並得到一個答案。我曾經做過「%s」%str(False)。恥辱我:) – 2010-02-13 22:07:43

+3

鏈接到相關文檔:http://docs.python.org/library/stdtypes.html#string-formatting-operations – bernie 2010-02-13 23:07:58

回答

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

這是不特定於布爾值 - %r呼籲參數的__repr__方法。 %s(對於str)也應該有效。

+2

'%r'和'%s'之間的主要區別是什麼? – Stallman 2015-09-13 08:17:57

+8

我總是有這種想法,但如果我錯了,請糾正我。 %s(因此str())旨在儘可能透明地爲人類表示對象。 %r(並因此repr())旨在儘可能透明地表示python的對象。例如,'print(str(「foo」))'只在新行上打印'foo'。 'print(repr(「foo」))'然而在新行上打印''foo'',包括引號,因爲這就是你需要輸入python解釋器來獲取相應對象到python中的參數。 – bobismijnnaam 2015-11-21 13:35:19

50

如果你想使用True False

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

因爲str(True)'True'str(False)'False'

,或者如果你想使用1 0

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

因爲int(True)1int(False)0

8

你也可以使用字符串

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); 

這些的Formatter class是結果

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

一些% -format類型說明符(%r%i)所不具備的。詳情請參閱Format Specification Mini-Language

+3

請注意,添加格式化選項[可以解決這個問題。](http://stackoverflow.com/q/36573222/241211) '{:_^5}'會讓你''__1 __'',除非你'(......)'布爾值。 – Michael 2017-04-24 16:38:45

+2

您可以[解開](https://stackoverflow.com/a/48326865/241211)像'!s'類型轉換的問題:''{!s:_^5}'。format(True)'是'真' – Michael 2018-01-18 17:20:01