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

Posted

技术标签:

【中文标题】Python中的字符串如何格式化布尔值?【英文标题】:How are booleans formatted in Strings in Python? 【发布时间】:2011-01-16 14:01:11 【问题描述】:

我知道我做不到:

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

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

【问题讨论】:

你想要的结果是什么?真假?那你想要'%s'。 %b,当它存在时,用于二进制(如在 base-2 中)。 嘿,是的! “%s”似乎工作得很好。回答这个问题并得到一个选择的答案。我曾经做过“%s”% str(False)。真丢脸:) 相关文档链接:docs.python.org/library/… 【参考方案1】:

参考Python string interpolation

在 Python 3.6 中,字符串插值被添加了一个新的字符串字面量 f 前缀

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

【讨论】:

【参考方案2】:

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

" ".format(True, False)

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

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

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

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

【讨论】:

【参考方案3】:

你也可以使用Formatter class的字符串

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)不可用。详情见Format Specification Mini-Language

【讨论】:

请注意添加格式选项can screw this up. E.g. :_^5 会得到你 '__1__' 除非你 str(...) 布尔值。 你可以get around!s这样的类型转换问题:'!s:_^5'.format(True)'True_'【参考方案4】:

如果你想True False 使用:

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

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

或者如果你想1 0 使用:

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

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

【讨论】:

【参考方案5】:
>>> print "%r, %r" % (True, False)
True, False

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

【讨论】:

%r%s 的主要区别是什么? 我一直有这个区别,但如果我错了,请纠正我。 %s(因此 str())旨在为人类尽可能透明地表示对象。 %r(因此 repr())旨在为 python 尽可能透明地表示对象。例如,print(str("foo")) 仅在新行上打印 fooprint(repr("foo")) 但是在新行上打印 'foo',包括引号,因为这是您需要在 python 解释器中键入的内容,以获取 python 中参数的相应对象。

以上是关于Python中的字符串如何格式化布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

python 字符编码格式化

python json布尔到小写字符串

如何使用布尔变量格式化 lua 字符串?

python数据类型变量以及编码和字符串格式化

day05_04 数据类型-数值布尔值字符串简介

如何使用值元组格式化字符串,例如使用 %(name)s