Python 中的字符串中的布尔值是如何格式化的?
我发现我做不到:
"%b %b" % (True, False)
用Python。我猜 %b
为 b(olean)。有这样的事吗?
I see I can't do:
"%b %b" % (True, False)
in Python. I guessed %b
for b(oolean). Is there something like this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这并非特定于布尔值 -
%r
对参数调用__repr__
方法。%s
(对于str
)也应该有效。This is not specific to boolean values -
%r
calls the__repr__
method on the argument.%s
(forstr
) should also work.如果您想要
True False
使用:因为
str(True)
是'True'
并且str(False)
是“假”
。或者如果您想要
1 0
使用:因为
int(True)
是1
并且int(False)
是 <代码>0。If you want
True False
use:because
str(True)
is'True'
andstr(False)
is'False'
.or if you want
1 0
use:because
int(True)
is1
andint(False)
is0
.您还可以使用 string 的 Formatter 类
这些是结果
某些
%
格式类型说明符(%r
、%i
)不可用。有关详细信息,请参阅迷你语言格式规范You may also use the Formatter class of string
These are the results
Some of the
%
-format type specifiers (%r
,%i
) are not available. For details see the Format Specification Mini-Language要更新Python-3,你可以这样做
但是,如果你想实际格式化字符串(例如添加空格),你会遇到Python将布尔值转换为基础C值(即int),例如
要解决这个问题,你可以将
True
转换为字符串,例如To update this for Python-3 you can do this
However if you want to actually format the string (e.g. add white space), you encounter Python casting the boolean into the underlying C value (i.e. an int), e.g.
To get around this you can cast
True
as a string, e.g.要扩展 phd 的答案,您可以在不使用
str()
-ing 的情况下完成所有这些操作format()
调用中的布尔值。您可以利用一些奇怪的技巧来使用新的字符串插值样式对布尔值进行格式化。它也适用于 f 弦。平淡、琐碎的情况
添加一些格式将布尔值转换为整数
任何填充长度都可以做到这一点。我不确定为什么有人希望它以这种方式工作。
字符串强制转换可以恢复正常文本
注意
!s
在那里。这是与%s
最直接的等同。还有用于__repr__()
的!r
和用于 ASCII 的!a
,但它们对于布尔值并不是特别有趣。To expand on the answer by phd, you can do all that without
str()
-ing your booleans in theformat()
call. There are some weird tricks you can exploit to do formatting for booleans with the new style of string interpolation. It also works for f-strings.The bland, trivial case
Adding some formatting converts booleans to integers
Any padding length will do this. I am not sure why someone would want it to work this way.
String coercion can bring back the normal text
Note the
!s
in there. This is the most direct equivalent to%s
. There's also!r
for__repr__()
and!a
for ASCII, but they're not particularly interesting for booleans.参考Python字符串插值
在Python 3.6中,字符串插值已经添加了新字符串文字 f 前缀
Referring to Python string interpolation
In Python 3.6, string interpolation has been added with a new string literal f prefix