2010-12-30 3 views
59

なぜ我々は(Pythonの2.6で)print_functionをインポートした後、印刷を起動します

from __future__ import print_function 

しかし、我々は(プリントを呼び出す機能を使用するには)ないprint_function( )。これは単なる矛盾ですか、これには正当な理由がありますか?なぜ、次のではない

は、Python 3では
from __future__ import print 
+5

もし 'print_function()'だったら、最初にコンパイラをポックする必要はないでしょう。これは '__future__'インポートが行うものです。 –

+0

本当に興味深い質問です。大好きです。 – Drake

+0

Pythonで使用されている\ What \ _ \ _ future \ _ \ _と、それをどのように使用するか、そしていつどのように使用するのか、そしてどのように動作するのかを解説しています(http://stackoverflow.com/questions/7075082/what-is-future -in-python-used-for-how-when-to-use-it-how-it-works) –

答えて

47

理由は、あなたが本当に少しだけ異なった、通常よりも動作するようにインタプリタを指示するフラグを設定している__future__からインポートするときにということですステートメント。したがって、__future__モジュールは「特別な」または「魔法の」モジュールです。通常のモジュールのようには機能しません。

+3

実際のモジュールです。 –

+6

ディスク上に__future__というモジュールがあり、その中に 'print_function'というものがありますが、実際の魔法はどこかで起こっています。 – delnan

+1

要約:このようなモジュールがありますが、魔法は他の場所で行われるため、気にする必要はありません。 :) –

3

、キーワードprintは、関数をコールする文を呼び出すから変更されました。

print valueの代わりにprint(value)と言う必要がありますか、SyntaxErrorと表示されます。

importを実行することで、この変更がPython 2でも行われるため、Python 3と同じ構文(少なくともprintに関する限り)でプログラムを書くことができます。 print_functionの場合には、print()関数はの代わりに利用できるようになる -

+0

なぜ__future__ import printからはできませんか? – H2ONaCl

+3

@broiyan:それはまだその時点でのステートメントなので。 –

+1

@broiyan:混乱するので、あなたはあなたが持っていない "print"という名前をインポートしたように見えます。 '__future__'のインポートは、Pythons構文の振る舞いを変えるMagickです。 –

10

print_functionは、FeatureNameであり、組み込み関数自体と混同しないでください。 将来提供される機能で、提供できる組み込み関数を使用することができます。

その他の機能は次のとおりです。

all_feature_names = [ 
    "nested_scopes", 
    "generators", 
    "division", 
    "absolute_import", 
    "with_statement", 
    "print_function", 
    "unicode_literals", 
] 

あなたは次の上位バージョンにコードを移行するとき、あなたのプログラムが__future__バージョンの代わりに、更新機能を使用するなどとして残るように、特定の理由があります。また、それが関数名またはキーワードそのものであった場合、パーサーに混乱を引き起こす可能性があります。

4

シンプルです。印刷は

from __future__ import print 

ので

from somewhere import print 

ようなステートメントは、Python 2.自動でSyntaxError(構文でそれをハードコーディング)許可

だろうPythonの2

にキーワードですその努力に値するとは思われなかった。

0

最小限の例

>>> print  # Statement. 

>>> from __future__ import print_function 
>>> print  # Function object. 
<built-in function print> 
>>> print() # Function call. 

>>> 

で述べたように:What is __future__ in Python used for and how/when to use it, and how it worksfrom __future__ Pythonはコードを解析する方法を変更魔法の文です。

from __future__ import print_function特に、上記の対話型シェルで示されているように、ステートメントから組み込み関数に変更されます(print)。

print(1) 

は次のように解析されます:

なぜPythonの2のfrom __future__ import print_functionなしprint(1)作品

ので

print (1) 
^^^^^ ^^^ 
1  2 
  1. print声明
  2. 引数

の代わり:

print(1) 
^^^^^^^^ 
1  2 1 
  1. print()機能
  2. 引数

そして:

assert 1 == (1) 

のところは:Python tuple trailing comma syntax rule

関連する問題