2016-07-31 5 views
3

私はsource code for __future__.pyを見てきました。それは私には意味がありません - これは実際にどうやって分割の振る舞いを変えるのでしょうか?Pythonは "from __future__ import division"をどう扱うのですか?

+2

マイ'compiler_flag'がコンパイラに分割を変更するように信号を送るかもしれないと推測します – Natecat

+0

興味深いかもしれません。多分' import'が実際にどのように動作するのか分かりません。私はそれが問題のモジュールを評価したと思って、その後、モジュールオブジェクトを作成して、名前空間スコープに入れたり、個々のプロパティ( 'from xyz import abc')を持たせることができました。しかし '__future __。py'を見ると、モジュールが評価されたように見えますが、すべての機能を有効にする必要があります。どのように 'from __future__ import XYZ'チェリー - ' __future __。py'でオブジェクトの作成を選択しますか? –

答えて

4

このモジュールはドキュメンタリー/イントロスペクションの目的のみを提供します。その中のコードは実際にはありませんです。むしろ

、Pythonはモジュールをコンパイルされ、それがfrom __future__ import文をチェックするモジュール、上PyFuture_FromASTを呼び出し、PyFutureFeatures対象に、彼らは有効だsets the appropriate flagsを想定しました。その後コンパイラはsets those flags in the compiler contextに進み、モジュールを実際にコンパイルします。

比較のために、あなたは、Python 3、__future__.pyでも同じであり、同じ情報のすべてが含まれていることがわかりますが、future.cですることができ、none of the features actually set any flagsこれらの機能のすべてはPython 3ではデフォルトで有効になっているので、

+0

注:行番号のリンクはすべて、私がこれを書いた時点で正確です。 hgwebを特定のリビジョンにリンクさせて、将来悪化しないようにする方法を見つけられませんでした。誰かがリンクを編集してより永続的にしたいのであれば、彼らはすべきです。 – hobbs

+0

なので、Pythonインタプリタは 'from __future__ import xyz'を実際に知っていて、それを特別に扱います(' from ordinary_module import xyz'と同じではありません)? –

+0

@JasonSが正しい。他の言語のプラグマやコンパイラ指令のようなものです。 – hobbs

関連する問題