Python 字典文本的求值顺序

Python 字典文本的求值顺序,python,dictionary,Python,Dictionary,打印val,键,即首先计算值。这是一种行为吗 跨python版本和实现的一致性 哪里有记录?(什么也没说) 参考手册的这一部分记录了订单,但声称它与您看到的不同: 在以下行中,表达式将按其后缀的算术顺序求值: 关于它的实现还有一个公开的bug:。事实证明,它在不同的实现之间并不一致 expr1, expr2, expr3, expr4 (expr1, expr2, expr3, expr4) {expr1: expr2, expr3: expr4} expr1 + expr2 * (expr3

打印
val,键
,即首先计算值。这是一种行为吗

  • 跨python版本和实现的一致性
  • 哪里有记录?(什么也没说)

参考手册的这一部分记录了订单,但声称它与您看到的不同:

在以下行中,表达式将按其后缀的算术顺序求值:

关于它的实现还有一个公开的bug:。

事实证明,它在不同的实现之间并不一致

expr1, expr2, expr3, expr4
(expr1, expr2, expr3, expr4)
{expr1: expr2, expr3: expr4}
expr1 + expr2 * (expr3 - expr4)
expr1(expr2, expr3, *expr4, **expr5)
expr3, expr4 = expr1, expr2
给出:

def p(x):
    print(x)
    return x

{p('k1'): p('v1'), p('k2'): p('v2'), p('k3'): p('v3')}
但是


可能这就是原因:您的代码相当于
dic[key()]=val()
。在赋值运算符中,RHS总是先求值,所以先打印
'val'
,然后执行LHS。非常感谢!有趣的是,RH说八年来没有人在乎。。。祝贺你得了100000分!谢谢,希望他们能尽快修好。
def p(x):
    print(x)
    return x

{p('k1'): p('v1'), p('k2'): p('v2'), p('k3'): p('v3')}
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
IronPython 2.7.3 (2.7.0.40) on Mono 4.0.30319.1 (32-bit)
[PyPy 2.0.0-beta1 with GCC 4.4.3] on linux2

v1
k1
v2
k2
v3
k3
Jython 2.5.1+ (Release_2_5_1, Oct 31 2011, 11:44:27) 
[OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52) 
[OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27

k1
v1
k2
v2
k3
v3