如何用Python中的字符串格式化布尔值?

Jua*_*nti 159 python boolean string-formatting

我看到我做不到:

"%b %b" % (True, False)
Run Code Online (Sandbox Code Playgroud)

在Python中.我猜%b对了b(oolean).有这样的事吗?

dan*_*ben 230

>>> print "%r, %r" % (True, False)
True, False
Run Code Online (Sandbox Code Playgroud)

这不是特定于布尔值 - 在参数上%r调用__repr__方法. %s(因为str)也应该工作.

  • 我总是心中有这种不安,但如果我错了,请纠正我.%s(因此str())旨在尽可能透明地为人类表示对象.%r(因此repr())旨在尽可能透彻地表示对象为python.例如,`print(str("foo"))`只在新行上打印`foo`.`print(repr("foo"))`然而在新行上打印''foo'`,包括引号,因为你需要在python解释器中键入以获得python中参数的相应对象. (16认同)
  • '%r`和'%s`之间的主要区别是什么? (2认同)

Des*_*egr 61

如果你想True False使用:

"%s %s" % (True, False)
Run Code Online (Sandbox Code Playgroud)

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

或者如果你想1 0使用:

"%i %i" % (True, False)
Run Code Online (Sandbox Code Playgroud)

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


Wol*_*olf 17

您也可以使用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);
Run Code Online (Sandbox Code Playgroud)

这些是结果

True False
True False
1 0
1.000000 0.000000
1.000000e+00 0.000000e+00
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,添加格式化选项[可以搞砸了.](http://stackoverflow.com/q/36573222/241211)例如```:_ ^ 5}`会得到''__1 __'`除非你`str(. ..)`布尔人. (4认同)
  • 您可以[绕过](/sf/answers/3382880581/)类型转换的问题,如`!s`:`'{!s:_ ^ 5}'.format(True)`是`'True_'` (2认同)

irr*_*rom 6

要为 Python-3 更新这个,你可以这样做

"{} {}".format(True, False)
Run Code Online (Sandbox Code Playgroud)

但是,如果您想实际格式化字符串(例如添加空格),您会遇到 Python 将布尔值转换为底层 C 值(即 int),例如

>>> "{:<8} {}".format(True, False)
'1        False'
Run Code Online (Sandbox Code Playgroud)

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

>>> "{:<8} {}".format(str(True), False)
'True     False'
Run Code Online (Sandbox Code Playgroud)