为什么我们可以将布尔值转换为str?

时间:2018-07-22 00:49:08

标签: python truthiness

我们知道bool()如何作用于各种python对象,例如strintlist

这是一个与之相反的问题。

您可以将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

4 个答案:

答案 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则将其转换为字符串。有专门的软件包,例如marshaljson用于编组。

但是强制转换是在Python中思考boolstr的错误方式。如上所述,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被考虑的事物非常有限:

  • 没有
  • 错误
  • 任何数字类型的零,例如0、0L,0.0、0j。
  • 任何空序列,例如'',(),[]。
  • 任何空映射,例如{}。
  • 用户定义类的
  • 实例,如果该类定义了 nonzero ()或 len ()方法,则该方法返回整数零或布尔值False < / li>

因此,如果您执行bool(something),则只会返回这些项目的False。 Python中的其他所有内容都是True,其中包括伪造事物的字符串表示形式:'0' 'False''None'等,因为字符串本身就是True