2017-11-05 3 views
8

私は同じ変数でステートメントを使用するコード例に走った:私が試みた同じ変数を持つ文で複数の等号を使用するのはなぜですか?

event_type=event_type=str(payload_json['event']) 

a=b=c=d=10 

及び4つのすべての変数(a、b、cおよびd)すべての10になりますlike:

a=10 
b=10 
c=10 
d=10 

これはAmazonのコード例であり、私はコード例ではなくPythonを理解しているとは思っていません。このページはここにあります: AWS Kinesis example

ここには何が起こりそうですか?いくつかのPythonのブースト私は理解していないか、または単にタイプミスですか?

+1

あなたは自分自身に答えているようです。はい、これは複数の変数に同じ値を割り当てるためのものです。 – Nabin

+4

@Fan_of_Martijn_Pieters:あなたは質問を逃しました。実際の質問は、 'a = a = value'という形式のコードで、割り当てられているオブジェクトが複製されています。 OPは、どのような化合物の割り当てステートメントが行うかの探索としてのみ、 'a = b = c = d = value'について議論する。 –

+1

'a = a = b'は' a = b'と変わらないと思います。それはちょうど私の間違いのように見えます。 –

答えて

2

a = a = bは、です。常にに相当します。これは、Pythonでa = bに相当します。多くのプログラミング言語でサポートされています。いくつかの言語は、同じ変数(C)の連鎖割り当てを検出するとエラーを発生させますが、他のものは単純に無視します(Python、javascript)。

代入演算子の振る舞いが修正フックなしでPythonに組み込まれているため、この振る舞いを変更するのは悪い考えであり、実現するのは難しいでしょう(Is it possible to overload Python assignment?参照)。したがって、これはあなたが発見した(無害な)タイプミスであると推測することは安全だと思います。

+2

他の多くの言語でも同等のコメントを削除または修飾することをお勧めします。たとえば、 'a = b'は' b'の値を 'a'に(必要に応じて変換して)変換しますが、' a = a = b'は未定義の動作をします(オブジェクトを変更するのは不正ですシーケンスポイント間で2回)。ありがとう@EricPostpischil。 –

+0

段落をより正確に更新しました。 – 7yl4r

関連する問題