我们知道bool()
如何作用于各种python对象,例如str
,int
,list
。
这是一个与之相反的问题。
您可以将bool转换为int
>>> int(True)
1
>>> int(False)
0
我认为这很有意义,但是有了字符串,我们得到了
>>> str(False)
'False'
>>> str(True)
'True'
我不了解的,首先,它似乎暗示了False
和'False'
之间的某种联系,这似乎只在代码级别相关。如果要用这种方式对待代码中编写的内容,那么它是如何工作的...
>>> str(not True)
'False'
第二,这不是为了保持一致性,
>>> bool(str(False))
True
我的问题是...是否允许我们以这种方式将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
答案 0 :(得分:7)
用于调试。如果您不能将任何内容强制转换为字符串,则无法打印。如果要打印数据结构以进行调试,则需要能够将每个元素转换为字符串。 That's what str
is documented to do ...
返回一个字符串,其中包含对象的可很好打印的表示形式。
如果要以这种方式对待代码中编写的内容,它是如何工作的...
>>> str(not True) 'False'
not True
解析为False
,然后将其传递给str
。与foo(1 + 1)
foo
接收2相似。
第二,因为一致性,
>>> bool(str(False)) True
铸造不能保证往返。例如int(float(2.34))
或int(unichr(97))
。
str
所做的工作是将人类的某些内容转换为字符串,而必须往返的marshalling则将其转换为字符串。有专门的软件包,例如marshal
或json
用于编组。
但是强制转换是在Python中思考bool
和str
的错误方式。如上所述,str
返回可打印的表示形式,而不是机器可读的表示形式。 bool
用于询问“此表达的真实性是什么?”? From the docs...
x是使用标准真值测试程序转换的。
"True"
和"False"
都是正确的。如果他们只是为bool
添加一个特殊情况,那将是非常不一致的。
答案 1 :(得分:3)
str()
和bool()
不是“ cast”,它们是构造函数(类型对象)。为任何值str(x)
调用x
将构造一个新的str
对象,其值从x
初始化(以某种方式)。这两个对象之间没有隐含的关系。 str(x)
可以返回任何东西,只要它是str
对象即可。
基本上:停止将Python视为具有您可能习惯的其他语言的“广播”。构造函数只是另一种可调用对象,通常的规则是每种类型都必须对传递给构造函数的参数进行合理的处理。在str()
的情况下,它委托给__str__
特殊方法(如果存在),这意味着bool
对象返回字符串'True'
和'False'
,因为这就是bool
类型决定这样做。
答案 2 :(得分:1)
那么,str(True)
是'True'
有什么问题?这完全是我们的预期。
现在,如果将布尔值转换为整数,很明显结果必须是数字。
自然,not True
的值为False
。即str(False)
,然后是:'False'
。
关于bool()
函数,应该为不为空,零,无或为False的任何内容返回True
。
因此,任何非''
的字符串都适合此字符串并返回True
。查看更多:https://docs.python.org/3/library/stdtypes.html#truth
答案 3 :(得分:-1)
在Python中,False
被考虑的事物非常有限:
因此,如果您执行bool(something)
,则只会返回这些项目的False
。 Python中的其他所有内容都是True
,其中包括伪造事物的字符串表示形式:'0'
'False'
,'None'
等,因为字符串本身就是True
。