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

dsekswqp  于 2023-01-19  发布在  Python
关注(0)|答案(6)|浏览(192)

我看我做不到:

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

在Python中,我猜%b代表B(olean),有这样的东西吗?

n7taea2i

n7taea2i1#

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

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

wgeznvg7

wgeznvg72#

如果要使用True False,请用途:

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

因为str(True)'True'并且str(False)'False'
或者如果您希望使用1 0,请使用:

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

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

nwwlzxa7

nwwlzxa73#

您还可以使用string的格式化程序类

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)不可用。有关详细信息,请参阅格式规范迷你语言

i86rm4rw

i86rm4rw4#

要针对Python-3更新此设置,可以执行以下操作

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

然而,如果你想实际格式化字符串(例如,添加白色),你会遇到Python将boolean强制转换为底层C值(例如,int),例如:

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

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

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

nkkqxpd95#

要扩展the answer by phd,你可以在format()调用中不用str()-ing你的布尔值就可以完成所有这些操作,你可以利用some weird tricks来用新的字符串插值风格格式化布尔值,它也可以用于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'
14ifxucb

14ifxucb6#

参考Python string interpolation
在Python 3.6中,添加了字符串插值,并带有新的字符串常量f前缀

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

相关问题