当前位置: 首页 > 面试题库 >

True和1和1.0在python词典中的评估结果相同。

朱睿
2023-03-14
问题内容

谁能解释python字典的这种行为?

d = {}
d[True] = 'Magic'
d[1] = 'Cool'
d[1.0] = 'Hello'
print(d)

# {True: 'Hello'}

为什么不打印所有其他(键,值)对?

为什么将True,1和1.0评估为相同?


问题答案:

所述hash的3个项目的1, 1.0, True是相同的(它等于1)。如果没有冲突,这就是python用作字典键的原因。而且1 == 1.0 == TrueTrue没有碰撞。

这里是有关python字典的旧实现的更多详细信息。新的实现按照这些原则行事(但保留顺序)。



 类似资料:
  • 问题内容: 我真的不明白这是如何解析的。为什么第二个示例返回False? 谢谢你的帮助。我想我一定会错过一些非常明显的东西。 我认为这与链接重复项有细微不同: 为什么表达式0 <0 == 0在Python中返回False? 。 这两个问题都与人类对表达的理解有关。在我看来,似乎有两种评估表达方式的方法。当然,两者都不正确,但是在我的示例中,最后的解释是不可能的。 看着您可以想象每个被评估的部分都可

  • 问题内容: 我遇到了这个表达式,我认为应该评估为True,但事实并非如此。 上面的语句按预期工作,但在以下情况下: 执行后,其结果为False。 我尝试搜索答案,但无法获得具体答案。谁能帮助我了解这种行为? 问题答案: 是一个运营商链,就像您 要做到这一点,您需要 和 都是如此。后者是错误的,因此是结果。添加括号不会再使运算符链接(某些运算符在括号中),这可以解释工作原理。 尝试: 再一次,一个很

  • 问题内容: 在python中进行如下构造是有效的: 我想问一个函数指针被评估为True的逻辑是什么。 为什么在语言中插入这种构造? 问题答案: 在Python中有很多评估结果。从关于布尔运算符的文档中: 在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值将解释为false:,,所有类型的数字零以及空字符串和容器(包括字符串,元组,列表,字典,集合和Frozensets)。所有其他值均解释为

  • 问题内容: 以下Python表达式之间有什么区别: 第一给出的结果与第二给出的结果不同。 例如, 第一: 第二: y是第一的 3 和第二的 4 问题答案: 在赋值语句中,总是在对变量进行实际设置之前先对右侧进行全面评估。所以, 评估板y(我们称之为的结果),评估(呼叫),然后设置要和y到。也就是说,就像 相比之下, 设置x为y,然后设置,因此等效于

  • 问题内容: 为什么用Python生成? 我在这里阅读以下内容: 如果两个字符串文字相等,则将它们放在相同的内存位置。字符串是不可变的实体。不会造成伤害。 那么每个Python字符串在内存中只有一个位置吗?听起来很奇怪。这里发生了什么? 问题答案: Python(例如Java,C,C ++ 、. NET)使用字符串池/内联。解释器意识到“ hello”与“ hello”相同,因此它优化并使用了内存中

  • 问题内容: 什么是Python中的惰性评估? 一个网站说: 在Python 3.x中,该函数返回一个特殊的范围对象,该对象按需计算列表元素(延迟或延迟评估): 这是什么意思? 问题答案: 由(或在Python2.x中)返回的对象被称为惰性迭代。 生成器没有将整个范围存储在内存中,而是存储的定义并仅在需要时才计算下一个值(又称惰性求值)。 本质上,生成器允许您返回类似于结构的列表,但是这里有一些区别