web-dev-qa-db-ja.com

Python2.xでのprint()(関数バージョン)の使用

ステートメントと式の違いを理解し、Python3がprint()を関数に変えたことを理解しています。

しかし、さまざまなPython2.xインタープリターで括弧で囲まれたprint()ステートメントを実行し、問題なく実行されました。モジュールをインポートする必要さえありませんでした。

私の質問:次のコードprint("Hello SO!")は、Python2.xのステートメントまたは式として評価されますか?

48
rahmu

次の式を考慮してください。

a = ("Hello SO!")
a = "Hello SO!"

それらは同等です。同様に、次のステートメントを使用します。

statement_keyword("foo")
statement_keyword "foo"

同等です。

印刷機能を次のように変更すると、

print("Hello","SO!")

python 2とpython 3の違いに気付くでしょう。python 2では、printはステートメントであるのに対し、(...,...)はタプルとしてインターセプトされますが、python 3では、これは、複数の引数を持つ関数呼び出しです。

したがって、当面の質問に答えるために、printは、from __future__ import print_function(python 2.6で導入された場合を除き)python 2.xのステートメントとして評価されます。

48
mgilson

print("Hello SO!")はステートメントprint ("Hello SO!")として評価されます。printステートメントの引数は式_("Hello SO!")_です。

これは、複数の値を印刷する場合に違いを生む可能性があります。たとえば、print("Hello", "world")は、2つの文字列_('Hello', 'world')_および_"Hello"_ではなく、2要素のタプル_"world"_を出力します。

Python 3との互換性のために_from __future__ import print_function_を使用:

_>>> print("Hello", "world")
('Hello', 'world')
>>> from __future__ import print_function
>>> print("Hello", "world")
Hello world
_
15
ecatmur

それはまだステートメントとして評価されます。あなたは単に("Hello SO!")を出力します。これはタプルではないので"Hello SO!"に評価されます(delnanによると)。

2
Lanaru