c, b = a, c + 1でNameError例外が送出される理由は？


> Problem 6: What will be the output of the following program.
[code]

    a, b = 2, 3
    c, b = a, c + 1
    print a, b, c
    
[/code]

こちらを実行しようとすると。。。

[code]

    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    NameError: name 'c' is not defined
    
[/code]

と出てきます。

[code]

    c = a
    
[/code]

としているにもかかわらずなので、よく理解が出来ません。




Python
の言語リファレンスの[評価順序の項](http://docs.python.jp/3/reference/expressions.html#evaluation-
order)によれば、

> Python は、式を左から右へと順に評価します。ただし、代入式を評価するときは、代入演算子の右側項が左側項よりも先に評価されます。

とありますので、代入演算子の右辺の式が全て計算されてから、左辺に代入されます。リンク先には

[code]

    expr3, expr4 = expr1, expr2
    
[/code]

という例があります (expr1, expr2, expr3, expr4 の順に計算される)。




まずはじめに`a, c + 1`が計算され、その結果が`c, b` に代入されるためです。

