Closed6

Pythonの代入文と代入式について

珠響そうき_えてみなる珠響そうき_えてみなる

Pythonの代入文は値を返さない。
なので、

if a = "hogehoge":
    print(a)

のような書き方は syntax error が出る。
しかし、代入式である:=演算子(通称:セイウチ演算子)を使うと書ける。

if a := "hogehoge":
    print(a)
珠響そうき_えてみなる珠響そうき_えてみなる

代入の機能が2種類あるのは、ifの条件式で、a == "hogehoge"と書きたいときに、a = "hogehoge"とタイポすることを防ぐためらしい。

珠響そうき_えてみなる珠響そうき_えてみなる

ようするに、Pythonの代入文a="hogehoge"は値を返さない(大事なことなので2回言った)。
一方で、

a = b = "hogehoge"

という書き方もできて、aにもbにも "hogehoge"が代入されるし、aとbのオブジェクトidは一致する。

珠響そうき_えてみなる珠響そうき_えてみなる

Pythonの代入文は値を返さないのでは?

print(a = "hogehoge") # syntax error
(a = "hogehoge") # syntax error
a = (b = "hogehoge") # syntax error
(a = b = "hogehoge") # syntax error
(a = b) = "hogehoge" # syntax error

a = b = "hogehoge" # 普通に動く
珠響そうき_えてみなる珠響そうき_えてみなる

複数の変数に代入するときだけ、代入文を並べられる。
括弧等を使って値として扱おうとするとエラーになる。
a = b = "hogehoge"のときだけ例外的に扱ってるのだろうか?
別に困らないけど、なんか気持ち悪い。

このスクラップは2020/12/21にクローズされました