7

Python 2.x では、2 つの整数を除算すると整数が返されます。ただし、使用する場合

from ___future___ import division

float 値を取得できます。

>>> 3/2
1
>>> from __future__ import division
>>> 3/2
1.5
>>> 
>>> 
>>> 3//2
1
>>> 4/3
1.3333333333333333
>>> 

の後、整数除算の代わりにimport使用する必要があります。整数除算を再度行うにはどうすれば元に戻すことができますか?///import/

4

2 に答える 2

13

__future__インポートは特殊であり、元に戻すことはできません。彼らの行動についてはこちらで読むことができます。

関連する部分をいくつか示します。

future ステートメントはコンパイル時に認識され、特別に処理されます。コア コンストラクトのセマンティクスの変更は、多くの場合、異なるコードを生成することによって実装されます。新しい機能によって互換性のない新しい構文 (新しい予約語など) が導入される場合もあります。その場合、コンパイラはモジュールを別の方法で解析する必要があります。このような決定は、実行時まで延期できません。
...
対話型インタープリター プロンプトで入力された将来のステートメントは、残りのインタープリター セッションで有効になります。

__future__ステートメントは実行時ではなくコンパイル時に処理されるため、変更された動作を元に戻すための実行時メソッドはありません。

通常のモジュールでは、名前空間からインポートしたものをすべて削除し、そのインポートのエントリを削除することで、モジュールを削除またはアンインポートできますsys.modules(この 2 番目の部分は、ユース ケースによっては必要ない場合があります。モジュールのリロードを強制するだけです)。モジュールが再度インポートされた場合)。

于 2012-09-19T16:34:48.477 に答える
5

importステートメントは、インポートするファイルに対してローカルであるため、たとえば、このファイルが次のようになっている場合example.py

from __future__ import division
print(1/2)

次に、それを別のファイルにロードします。

import example # prints 0.5 because `division` is imported in example.py
print(1/2) # prints 0 because `division` is not imported in this file

したがって、一部のコードでのみ使用されるインポートが必要な場合は、そのコードを別のファイルに入れてください。

あなたが与えた場合、それが役立つかどうかはわかりませんが。//整数除算が必要なときにだけ使用しないのはなぜですか?

于 2012-09-19T16:29:43.617 に答える