Python 2.7では、次の両方で同じことが行われます
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
ただし、以下は
print("Hello,", "World!") # Prints the Tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
Python 3.xのprint
の括弧は必須であり、本質的に関数になっていますが、2.7では両方とも異なる結果で機能します。 Python 2.7のprint
について他に知っておくべきことはありますか?
Python 2.x print
は、実際には特別なステートメントであり、関数ではありません*。
これは、次のように使用できない理由でもあります:lambda x: print x
(expr)
はタプルを作成しません(結果はexpr
になります)が、,
は作成します。これにより、Python 2.7でprint (x)
とprint (x, y)
が混同される可能性があります。
(1) # 1 -- no Tuple Mister!
(1,) # (1,)
(1,2) # (1, 2)
1,2 # 1 2 -- no Tuple and no parenthesis :) [See below for print caveat.]
ただし、print
はPython 2.xの特別な構文ステートメント/文法構成であるため、括弧なしで、,
を特別な方法-およびしないタプルを作成します。 print
ステートメントのこの特別な処理により、末尾に,
があるかどうかにかかわらず、異なる動作をすることができます。
ハッピーコーディング。
* Python 2のこのprint
動作は、Python 3の動作に変更できます。
from __future__ import print_function
ここでは、UTF-8に関して興味深い副作用があります。
>> greek = dict( dog="σκύλος", cat="γάτα" )
>> print greek['dog'], greek['cat']
σκύλος γάτα
>> print (greek['dog'], greek['cat'])
('\xcf\x83\xce\xba\xcf\x8d\xce\xbb\xce\xbf\xcf\x82', '\xce\xb3\xce\xac\xcf\x84\xce\xb1')
最後の印刷は、16進数のバイト値を持つタプルです。
それはすべて非常に単純であり、前方または後方互換性とは何の関係もありません。
バージョン3以前のすべてのPythonバージョンのprint
ステートメントの一般的な形式は次のとおりです。
print expr1, expr2, ... exprn
(各式は順番に評価され、文字列に変換され、それらの間にスペースが表示されます。)
ただし、式をカッコで囲むことは依然として同じ式であることに注意してください。
したがって、これを次のように書くこともできます。
print (expr1), (expr2), ... (expr3)
これは、関数の呼び出しとは関係ありません。
基本的に、Python 3の前のPython 3では、printは、引数として取得された場合にすべての文字列を出力する特別なステートメントでした。したがって、print "foo","bar"
は単に「 'foo'に続いて 'bar'を印刷する」ことを意味していました。それに関する問題は、printが関数であるかのように振る舞うことで、(a,b)
はa
とb
を含むタプルですが、foo(a,b)
は関数の呼び出しであるため、Python文法は曖昧です。 2つの引数。
そこで、彼らは3の互換性のない変更を行って、プログラムをより曖昧にせず、より規則的にしました。
(実際、2.7はこれに対して2.6のように動作すると思いますが、確信はありません。)