为什么我们可以把bool扔给str?

Joe*_*ley 0 python truthiness

我们知道如何bool()作用于各种Python对象,如str,int,list.

这是一个相反的问题.

您可以将bool转换为int as

>>> int(True)
1
>>> int(False)
0
Run Code Online (Sandbox Code Playgroud)

我认为有点意义,但我们得到了字符串

>>> str(False)
'False'
>>> str(True)
'True'
Run Code Online (Sandbox Code Playgroud)

我没有得到,因为它首先似乎暗示了False和之间的某种关系'False',这在代码层面上似乎只是相关的.如果以这种方式处理代码中的内容,那么它是如何工作的......

>>> str(not True)
'False'
Run Code Online (Sandbox Code Playgroud)

其次,它的一致性并不明显,因为

>>> bool(str(False))
True
Run Code Online (Sandbox Code Playgroud)

我的问题是...有没有我们允许投一个原因bool,以str这种方式?list例如,不允许它......

>>> list()
[]
>>> bool()
False
>>> bool(list())
False
>>> list(bool())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'bool' object is not iterable
Run Code Online (Sandbox Code Playgroud)

Sch*_*ern 8

用于调试.如果您不能将某个东西转换为字符串,则无法打印它.如果要打印数据结构以进行调试,则需要能够将每个元素转换为字符串.str是记录下来的 ......

返回一个包含对象的可打印表示的字符串.


如果以这种方式处理代码中的内容,那么它是如何工作的......

>>> str(not True)
'False'
Run Code Online (Sandbox Code Playgroud)

not True解析False然后传递给str.它与foo(1 + 1) foo接收2 的方式类似.


其次,它的一致性并不明显,因为

>>> bool(str(False))
True
Run Code Online (Sandbox Code Playgroud)

铸造不保证往返.例子是int(float(2.34))int(unichr(97)).

将某些东西转换为人类的字符串之间存在重要区别,这就是做什么str,并将某些内容转换为字符串以进行编组,这些字符串必须往返.有专门的包装,如编组marshaljson编组.

但是在Python中思考bool和投射是错误的方法str.如上所述,str返回可打印的表示,而不是机器可读的表示.bool是为了问"这个表达的真实性是什么"?来自文档......

使用标准真值测试程序转换x.

"True"并且"False"都是真的.如果他们添加了一个特殊情况,bool那将是非常不一致的.