1

我正在使用一个可变的数据结构,并注意到做d[mods_mutable()] = mods_mutable()]的行为与

key = mods_mutable()
d[key] = mods_mutable()

很容易猜到发生了什么。快速访问一个临时文件和一个小测试确认:

x = 0
def f():
    global x
    x += 1
    return x

d = dict()
d[f()] = f()
print d

运行它,我们得到{2: 1}. 显然,密钥的值是第二次评估哪种有意义(如果我们得到一个异常或这样的获取值,那么创建密钥的意义何在?)。

这种行为是否记录在案?我在官方文档上找不到任何东西,谷歌搜索也没有解决我的问题。无论实施和版本如何,我们都能保证这个顺序吗?还有更多这样的陷阱需要注意吗?

4

1 回答 1

3

Python 从左到右计算表达式。请注意,在评估分配时,右侧在左侧之前评估

5.14。评估顺序

于 2013-03-17T00:57:53.883 回答