我发现我不能做:
"%b %b" % (True, False)
在Python中,我猜测%b
代表布尔值。是否有类似的用法?
我发现我不能做:
"%b %b" % (True, False)
在Python中,我猜测%b
代表布尔值。是否有类似的用法?
>>> print "%r, %r" % (True, False)
True, False
这不仅适用于布尔值 - %r
调用参数的 __repr__
方法。 %s
(用于字符串)也应该起作用。
%r
е’Ң%s
зҡ„дё»иҰҒеҢәеҲ«жҳҜд»Җд№Ҳпјҹ - Alstonprint(str("foo"))
仅在新行上打印foo
。然而,print(repr("foo"))
会打印一个新的带引号的字符串'foo'
,因为这就是你在Python解释器中键入以获得相应的对象参数的方式。 - bobismijnnaam如果你想要 真 假
,请使用:
"%s %s" % (True, False)
因为str(True)
的结果是'True'
,而str(False)
的结果是'False'
。
如果你想要1 0
,可以使用:
"%i %i" % (True, False)
因为 int(True)
的结果是 1
,而 int(False)
的结果是 0
。
您也可以使用字符串的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
)不可用。有关详细信息,请参见格式规范微语言。
{ :_^5}
将得到'__1__'
,除非您对布尔值进行str(...)
处理。 - Michael!s
这样的类型转换来解决问题:'{!s:_^5}'.format(True)
将得到 'True_'
。 - Michael"{} {}".format(True, False)
然而,如果您想实际格式化字符串(例如添加空格),您会遇到Python将布尔值转换为底层的C值(即int)的情况,例如:
>>> "{:<8} {}".format(True, False)
'1 False'
True
转换为字符串形式,例如:>>> "{:<8} {}".format(str(True), False)
'True False'
扩展 phd 的回答,您可以在format()
调用中不使用str()
将布尔值转换为字符串。有一些奇怪的技巧可以利用新风格的字符串插值格式化布尔值。这也适用于 f-strings。
'{},{}'.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
最直接的等效方式。还有!r
代表__repr__()
,!a
代表ASCII,但对于布尔值来说它们并不特别有趣。
'{!s:>5},{!s:>5}'.format(True, False) # ' True,False'
f'{True!s:>5},{False!s:>5}' # ' True,False'
在Python 3.6中,使用新的字符串字面量f前缀添加了字符串插值功能。
shouldBeTrue = True
print(f"shouldBeTrue={shouldBeTrue}")