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にクローズされました