Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典是否按顺序计算文本?_Python_Dictionary - Fatal编程技术网

Python字典是否按顺序计算文本?

Python字典是否按顺序计算文本?,python,dictionary,Python,Dictionary,当我运行这个 import itertools bar = itertools.count(1).next print {'a': bar(), 'b': bar(), 'c': bar()} 在CPython上,我得到{'a':0,'b':1,'c':2}。这在所有实施和/或任何地方都是一致的吗?a、b和c的赋值是否会出现顺序错误?可以找到您问题的答案(我没有足够的声誉将此作为评论添加) 总之,“字典求值顺序应与编写的顺序相同,但存在一个突出的错误,即在键之前求值。”有趣的问题。更好的测

当我运行这个

import itertools

bar = itertools.count(1).next

print {'a': bar(), 'b': bar(), 'c': bar()}

在CPython上,我得到
{'a':0,'b':1,'c':2}
。这在所有实施和/或任何地方都是一致的吗?
a
b
c
的赋值是否会出现顺序错误?

可以找到您问题的答案(我没有足够的声誉将此作为评论添加)


总之,“字典求值顺序应与编写的顺序相同,但存在一个突出的错误,即在键之前求值。”

有趣的问题。更好的测试是使用整数,因为这些整数散列到它们自己的值,并在文本中无序使用它们,以便您可以看到它们的求值顺序。当您这样做时,您会看到:

>>> print {1: bar(), 3: bar(), 2: bar()}
{1: 1, 2: 3, 3: 2}
这意味着它们是按从左到右的顺序计算的,即使它们没有按该顺序存储在字典中。

from(强调我的):

如果给定了以逗号分隔的键/数据对序列,将从左到右对它们进行求值,以定义字典的条目:每个键对象用作字典中的键,以存储相应的数据


因此,配对将始终按顺序进行评估。但不要混淆元素的顺序。

我不这么认为。考虑到字典键首先不能保证以任何顺序排列,我认为您不能保证解释器构建dict文本的其他方式。这是一个有趣的问题。不,很明显,从下面的一些答案来看,Python文档确实在这方面开了一个处方,尽管这很好。我不确定它是否总是对您有效。也许如果你像你的例子中那样以内联方式初始化它,它就可以工作了。我很确定,如果您创建一个新的dict并以相同的顺序分配值,它将不会是keptt,它仍然与解释器计算字典文本的顺序无关。是的,它是这样做的:bar()函数的要点是它返回递增计数器,它显示了它被调用的顺序。在这里,我们看到首先调用1,然后调用3,然后调用2,所以从左到右计算文字。我现在明白了,感谢您的澄清。这很好。我的问题是,这对搭档是否按顺序进行了评估。在这里,请进行向上投票,以便下次您可以留下评论。还有我的评论。评论级别未锁定-我看到了光明的未来。谢谢!:)