Pythonでの式(Expression)と文(Statement)


このエントリーをはてなブックマークに追加

Python2ではprintは文(Statement)であったが、Python3ではprintは式(Expression)になった、という記述をよく見る。しかしその違いがよく分からなかったので調べてみた。嘘を言っているかもしれない…

式(Expression)

式とは、評価されることによって、何らかの値(Value)、つまりは何らかのPythonのオブジェクトになるもの。たとえば、数字とかリストとかクラスのインスタンスとか。例えば、

  • 3 + 5
  • [1, 2, 3, 4, 5]

関数とかラムダ式も、オブジェクトとして扱うことができるので式の一種である(たぶん)。これらを式として使う分かりやすい例は、map関数などの高階関数を使うとき。mapを使うときは、

  • map(myfunc, [2, 3, 4])
  • map(lambda x: x**2, [2, 3, 4])

みたいに、関数myfuncやラムダ式を与える。ここでのmyfuncやラムダ式は、ともに式である。

文(Statement)

文とは、何かをするコードのことである。例えば

  • x = x + 3

は、x + 3という式を変数xに代入する仕事をしているので文である。

単に式を書いだだけで何も作用がないコード、例えば

  • x + 3

も、仕事はしていないけど文でもある(たぶん)。

他にも、if, for, while, try, defなどはすべて文である。制御文というくらいだから。

Python2とPython3でのprint

Python2では、printは関数ではなかった。すなわち式ではなかった。その代わりに文であった。その証拠に、Python2ではprintを変数に入れることができない。

>>> my_func = print
  File "<stdin>", line 1
    my_func = print
                  ^
SyntaxError: invalid syntax

Python3では、printは関数になった。すなわち式になった。その証拠に、変数に代入することができる。

>>> myfunc = print
>>> myfunc(100)
100