2010-02-13 95 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