2012-09-25 17 views
6

次のインポートステートメントの効果の間に、微妙な違いがあるか微妙な違いはありますか?私は両方ともサンプルプログラムで使用されていることを見出しましたが、確かに、どちらもうまくいくようです。機能的には全く同じであれば、Pythonの「あるものを実行する方法は1つしかない」ということに反するだろう。だから私は困惑している。私はちょうどPythonで始まり、良い習慣を維持しようとしています。だから、例えば、scipyのダウンロードパッケージで補間モジュール用...パッケージからモジュールをインポートするPythonic方法

from scipy import interpolate as spi 

または

import scipy.interpolate as spi 

の両方があり、ノーSPIとして、現在の名前空間に

答えて

0

これは本当に味の問題です。

この具体的なケースでは、interpolatescipyのサブモジュールであることを覚えておいて、import scipy.interpolate as spiを使用します。モジュールから関数をインポートする場合は、from module import functionを使用します。

唯一のことは、選択した規約に従っていることです。

+0

私は「import package.module as shortname」バージョンを好んでいますが、「from package import module」がそれを推奨するものがあるかどうか疑問に思っています。私は "モジュールのインポート関数から"名前を変更するかどうかにかかわらず、私は自分のコードでモジュールと関数名の可視性を持っているのが好きです。ですから、 "full_module_nameをショートネームとしてインポートする"ことは、full_module_nameにパッケージ接頭辞があるかどうかにかかわらず、一貫性のある方法です。私は、np、sp、tk、plt、numpr.randomなどのnprなど、多くの情報源から切り詰めるような一貫した短い名前を使用します。 –

10

を補間モジュールを置くように見えます2つのステートメントの違いはなく、まったく同じ名前のオブジェクトがモジュールの名前空間(globals())に置かれます。

若干異なる方法でそれについて説明しますが、最終結果は同じです。

from scipy import interpolate 
spi = interpolate 
del interpolate 

を、2つ目はダウン

import scipy.interpolate 
spi = scipy.interpolate 
del scipy 

に来て、最終的にあなたが持っているすべてはinterpolate関数にバインドされspi名前は次のとおりです。

基本的に、最初はありません。

個人的に、私はそのような関数の名前を変更しないと、私は、オブジェクトが、私がfrom scipy import interpolateを使用したいコード、またはを通じてどこから来るのか明確に伝える、import scipyとしてそれを維持してscipy.interpolateを使用すると思います。

オブジェクトの名前を変更すると入力を簡単にすることができますが、数か月後にこのコードに再度アクセスすると、後であなたや他の人が苦労する可能性があります。

+0

私は補間がモジュールであり、関数ではないことを明確にすべきでした。私は最終的にf = spi.interp1d(... –

+0

@Neil_UKを使用して終了します。コメントはまだ適用されますが、それはモジュールまたは関数です:-)文言を調整しました。 –

関連する問題