5
def key(): print 'key'
def val(): print 'val'

{key() : val()}

つまりval, key、値が最初に評価されます。この振る舞いか

4

2 に答える 2

10

リファレンス マニュアルのこのセクションでは順序について説明していますが、表示されているものとは異なると主張しています: 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

また、それに関する実装上の未解決のバグがあります: 辞書表示の評価順序がリファレンス マニュアルとは異なります

于 2013-03-28T12:04:39.917 に答える
5

実装間で一貫性 がないことが判明しました。

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
于 2013-03-28T12:08:45.797 に答える