def key(): print 'key'
def val(): print 'val'
{key() : val()}
打印val, key
,即首先评估该值。这是行为辞典文字的评估顺序
- 跨越python版本和实现一致吗?
- 记录在任何地方? (http://docs.python.org/2/reference/expressions.html#dictionary-displays说什么)
def key(): print 'key'
def val(): print 'val'
{key() : val()}
打印val, key
,即首先评估该值。这是行为辞典文字的评估顺序
参考手册的这一部分文档的顺序,但声称它比你所看到的不同:http://docs.python.org/2/reference/expressions.html#evaluation-order
在下面的线条,表达将在评估其后缀的运算顺序:
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
而且没有针对它的实现一个开放的错误:Evaluation order of dictionary display is different from reference manual。
非常感谢!有趣的是,RH如何说那里没有人关心过八年......并祝贺100,000分! – georg
事实证明,它是而不是跨实现一致。
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
谢谢,希望他们能很快得到解决。 – georg
可能是这样的原因是:您的代码等价于'DIC [键()] = VAL()'。在赋值运算符中,RHS总是先评估,所以首先打印'val',然后执行LHS。 –