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

我知道我做不到:

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

我用 b (oolean)来猜 %b。有这样的东西吗?

202420 次浏览

如果你想使用 True False:

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

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

或者如果你想使用 1 0:

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

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

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

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

也可以使用字符串的 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

一些 %格式的类型说明符(%r%i)不可用

为了在 Python-3中更新它,您可以这样做

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

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

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

要解决这个问题,可以将 True强制转换为字符串,例如。

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

指的是 Python 字符串插值

在 Python 3.6中,字符串插值添加了一个新的字符串文字 F前缀

shouldBeTrue = True
print(f"shouldBeTrue={shouldBeTrue}")

要在 博士答案上展开,您可以做到所有这些,而无需在 format()调用中对布尔值进行 str()处理。有 一些奇怪的把戏,你可以利用做布尔型格式与新的字符串插值样式。它也适用于 f 字符串。

平淡无奇的案子

'{},{}'.format(True, False)  # 'True,False'
f'{True},{False}'            # 'True,False'

格式化将布尔值转换为整数

任何填充长度都可以。

'{:0},{:0}'.format(True, False)  # '1,0'
f'{True:0},{False:0}'            # '1,0'


'{:>5},{:>5}'.format(True, False)  # '    1,    0'
f'{True:>5},{False:>5}'            # '    1,    0'

字符串强制 可以恢复正常的文本

注意这里的 !s。这是最直接的相当于 %s。对于 __repr__()也有 !r,对于 ASCII 也有 !a,但是对于布尔型它们并不特别有趣。

'{!s:>5},{!s:>5}'.format(True, False)  # ' True,False'
f'{True!s:>5},{False!s:>5}'            # ' True,False'