Python设置了class,float和int评估

时间:2015-12-24 00:46:06

标签: python class collections set

我还没有看到set Class的实现细节,但我认为答案就在那里。 Python赋值基本上计算rvalues并使用标识符作为引用对象来指向类对象。对于集合也是如此,即它们是抽象数据结构或参考对象的“集合”。集合不允许重复,当我创建一个这样的集合时:

s1 = {False, 1.0, 1, "a"} > {False, 1.0, "a"}

Float类胜过int类,显然它们评估的是同一个东西。但为什么浮动show和init不?我似乎找不到合适的答案或在源头看到它。

顺便提一下,我想提一下,我注意到如果使用.union()操作两者都存在,则分别以某种方式篡改True和False代替1和0。所以Floats战胜了Ints,并且看起来Ints战胜了Bools。但是,

>>> s1 = {False, 'a', 1}
>>> s2 = {True, 'a', 0}

>>> s1 | s2
{False, 1, 'a'} 

错误仍然存​​在.. 我不知道这是否是一个REPL问题,但经过再次测试后,每当我不知道发生了什么时我都会{0, 1, 'a'}

>>> s1 = {True, 'a', 1}
>>> s1
{1, 'a'}
>>> s2 = {False, 'a', 0}
>>> s2
{0, 'a'}

我错过了什么?

>>> s1.union(s2)
{0, 1, 'a'}

1 个答案:

答案 0 :(得分:2)

来自https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy

  

布尔类型是整数类型的子类型,并且布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是当转换为字符串时,字符串" False&# 34;或" True"分别归还。