这有效:
In [3]: print "%r"%(1==2)
False
这种作品:
In [2]: formatted_str = "{0:1.2f}".format(1==2)
In [3]: formatted_str
Out[3]: '0.00'
然而:
In [5]: formatted_str = "{0:r}".format(1==2)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-b136410cc311> in <module>()
----> 1 formatted_str = "{0:r}".format(1==2)
ValueError: Unknown format code 'r' for object of type 'bool'
如何让.format()
打印&#34; True&#34;或&#34;错误&#34;对于布尔?
答案 0 :(得分:4)
嗯,首先:
如何使.format()打印&#34; True&#34;或&#34;错误&#34;对于布尔?
不要指明任何事情。 bool值的默认格式已经为您提供了'True'
或'False'
。 %
- 格式化:
>>> '{0}'.format(False)
'False'
>>> '%s' % (False,)
'False'
__format__
的{{1}},__str__
和__repr__
都返回相同的内容 - 在2.x中,bool
返回Unicode版本的当然,同样的事情也是如此。这也意味着:
__unicode__
但更一般地说,如果您 需要>>> format(False), format(False, ''), repr(False), str(False), unicode(False)
('False', 'False', 'False', 'False', u'False')
,那么您将如何使用%r
进行此操作?
嗯,没有这样的格式规范代码(format
后面的东西):
,但是有转换修饰符flag r
(r
分隔符之后,!
之前的内容(如果存在)。所以:
:
Format String Syntax的文档更详细地解释:
转换字段会在格式化之前导致类型强制。通常,格式化值的工作是通过值本身的
'{0!r}'.format(1==2)
方法完成的。但是,在某些情况下,最好强制将类型格式化为字符串,从而覆盖其自己的格式定义。通过在调用__format__()
之前将值转换为字符串,可以绕过正常的格式化逻辑。目前支持三种转换标记:
__format__()
调用值'!s'
,str()
调用'!r'
和repr()
调用'!a'
}。
请注意,这也意味着基本ascii()
实际上并不像'{0}'.format(1==2)
那样做,因为它调用的是'%s' % (1=2,)
而不是__format__
。
更一般地说,虽然许多格式规范代码符合__str__
格式转换类型代码 - 格式化,但它并不完全匹配。除了分裂&#34;转换类型&#34;的想法分为两个单独的东西,也有代码巧妙或根本不同的东西 - 最明显的是,%
意味着&#34;这不是格式代码,它是文字'%%'
&#34;,而%
表示&#34;打印此百分比&#34;。当它不明显时,文档总是清晰的。
答案 1 :(得分:2)
像这样(python2.7 +):
>>> '{!r}'.format(1 == 2)
'False'
或者,如果你想指定位置(或被迫与python2.6兼容):
>>> '{1!r} is not {0!r}'.format(1==2, 1==1)
'True is not False'
您甚至可以正常使用关键字:
>>> '{foo!r} is not {0!r}'.format(1==2, foo=1==1)
'True is not False'