質問: 対話型シェルにおいて3系をグローバル指定にした状態で、2系のprint文「print "Hello World!"」を実行してもエラーにならずちゃんと表示されます。一方、2系をグローバル指定にした状態で、3系の「print ("Hello World")」を実行してもエラーにならずにちゃんと表示されます。2系と3系では互換性がないということですが、何処がおかしいのでしょうか?また、後者の場合は2to3が自動で働いてるのでしょうか?お分かりの方、ご回答宜しくお願いします。 追記:幾つかの回答有難う御座いました。質問の意味は下記の状況になります。 ``` $ python -V Python 2.7.10 $ pyenv global 2.7.12 $ pyenv versions system * 2.7.12 (set by /Users/~/.pyenv/version) 3.5.2 $ python Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello World") Hello World ``` ご指摘頂いた、$ python -Vコマンドと$ pythonコマンドの後に、Python 2.7.10が表示されるのは何故でしょうか? $ pyenv global 2.7.12コマンドで、使用するPythonの全体のバージョンが2.7.12に変わるものだと思っていました。
回答: > > 対話型シェルにおいて3系をグローバル指定にした状態で、2系のprint文「print "Hello World!"」を実行してもエラーにならずちゃんと表示されます。 > > > (下を書いてから気づきましたが、「グローバル指定」の意味を明らかにした方が良いですね。該当環境内で `import platform; print(platform.python_version())` してみては) `print ("Hello")`という表記は**Python2/3の両方**で有効です。一方、`print "Hello"`は**Python2でのみ**有効です。 Python2では「print文」という特別な構文が提供されており、`print "文字列"`と記述できます。文字列を括弧で括った場合は、単に冗長な括弧とみなされます。 Python3では「print関数」という普通の関数に変更されました。そのため`print "文字列"`という記述は構文エラーになります。`print ("文字列")`のように関数呼び出しのための括弧が必要です。(空白文字の挿入は意味を持ちません)