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])
文(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