:なぜ我々は(Pythonの2.6で)print_functionをインポートした後、印刷を起動します
from __future__ import print_function
しかし、我々は(プリントを呼び出す機能を使用するには)ないprint_function( )。これは単なる矛盾ですか、これには正当な理由がありますか?なぜ、次のではない
:
は、Python 3ではfrom __future__ import print
:なぜ我々は(Pythonの2.6で)print_functionをインポートした後、印刷を起動します
from __future__ import print_function
しかし、我々は(プリントを呼び出す機能を使用するには)ないprint_function( )。これは単なる矛盾ですか、これには正当な理由がありますか?なぜ、次のではない
:
は、Python 3ではfrom __future__ import print
理由は、あなたが本当に少しだけ異なった、通常よりも動作するようにインタプリタを指示するフラグを設定している__future__
からインポートするときにということですステートメント。したがって、__future__
モジュールは「特別な」または「魔法の」モジュールです。通常のモジュールのようには機能しません。
実際のモジュールです。 –
ディスク上に__future__というモジュールがあり、その中に 'print_function'というものがありますが、実際の魔法はどこかで起こっています。 – delnan
要約:このようなモジュールがありますが、魔法は他の場所で行われるため、気にする必要はありません。 :) –
、キーワードprint
は、関数をコールする文を呼び出すから変更されました。
print value
の代わりにprint(value)
と言う必要がありますか、SyntaxError
と表示されます。
import
を実行することで、この変更がPython 2でも行われるため、Python 3と同じ構文(少なくともprint
に関する限り)でプログラムを書くことができます。 print_function
の場合には、print()
関数はの代わりに利用できるようになる -
なぜ__future__ import printからはできませんか? – H2ONaCl
@broiyan:それはまだその時点でのステートメントなので。 –
@broiyan:混乱するので、あなたはあなたが持っていない "print"という名前をインポートしたように見えます。 '__future__'のインポートは、Pythons構文の振る舞いを変えるMagickです。 –
print_function
は、FeatureName
であり、組み込み関数自体と混同しないでください。 将来提供される機能で、提供できる組み込み関数を使用することができます。
その他の機能は次のとおりです。
all_feature_names = [
"nested_scopes",
"generators",
"division",
"absolute_import",
"with_statement",
"print_function",
"unicode_literals",
]
あなたは次の上位バージョンにコードを移行するとき、あなたのプログラムが__future__
バージョンの代わりに、更新機能を使用するなどとして残るように、特定の理由があります。また、それが関数名またはキーワードそのものであった場合、パーサーに混乱を引き起こす可能性があります。
シンプルです。印刷は
from __future__ import print
ので
from somewhere import print
ようなステートメントは、Python 2.自動でSyntaxError(構文でそれをハードコーディング)許可
だろうPythonの2
にキーワードですその努力に値するとは思われなかった。
最小限の例
>>> 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
print
声明の代わり:
print(1)
^^^^^^^^
1 2 1
print()
機能そして:
assert 1 == (1)
もし 'print_function()'だったら、最初にコンパイラをポックする必要はないでしょう。これは '__future__'インポートが行うものです。 –
本当に興味深い質問です。大好きです。 – Drake
Pythonで使用されている\ What \ _ \ _ future \ _ \ _と、それをどのように使用するか、そしていつどのように使用するのか、そしてどのように動作するのかを解説しています(http://stackoverflow.com/questions/7075082/what-is-future -in-python-used-for-how-when-to-use-it-how-it-works) –