布尔在Python中如何格式化为字符串?


170

我看到我做不到:

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

在Python中。我猜%b是b(oolean)。有这样的东西吗?


1
您希望结果是什么?真假?那你要'%s'。%b(如果存在)用于二进制文件(如在base-2中)。
Thomas Wouters 2010年

1
嗯是的 “%s”似乎工作正常。回答此问题并获得正确的答案。我曾经做过“%s”%str(False)。真可惜:)
Juanjo Conti 2010年

Answers:


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

这不是特定于布尔值的- 在参数上%r调用__repr__方法。 %s(对于str)也应该起作用。


2
%r和之间的主要区别是%s什么?
Alston 2015年

22
我一直都想着这种区分,但是如果我错了,请纠正我。%s(因此也就是str())旨在尽可能透明地代表人类。%r(和因此的repr())旨在尽可能透明地表示python对象。例如,print(str("foo"))foo在新行上打印。print(repr("foo"))但是会'foo'在换行符(包括引号)上打印,因为这是您需要在python解释器中键入的内容,才能将相应的对象获取到python中的参数。
bobismijnnaam

66

如果要True False使用:

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

因为str(True)'True'str(False)'False'

或者如果您想1 0使用:

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

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


18

您也可以使用字符串的Formatter类

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

这些是结果

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

某些%-format类型说明符(%r%i)不可用。有关详细信息,请参见格式规范迷你语言


4
请注意,添加格式设置选项可能会搞砸。例如{:_^5}'__1__'除非您str(...)是布尔人,否则都会得到您。
Michael-Clay Shirky在哪里,

2
您可以解决类型转换的问题,例如!s'{!s:_^5}'.format(True)is'True_'
Michael-Clay Shirky在哪里

4

要针对Python-3更新此代码,您可以执行此操作

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

但是,如果要实际格式化字符串(例如,添加空格),则会遇到Python将布尔值强制转换为基础C值(即int)的情况,例如

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

为了解决这个问题,您可以将True其转换为字符串,例如

>>> "{:<8} {}".format(str(True), False)
'True     False'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.