質問

C++ では、多くの場合、「using」キーワードを注意深く使用することで、コードの可読性を大幅に向上させることができます。次に例を示します。

void foo()
{
    std::vector< std::map <int, std::string> > crazyVector;
    std::cout << crazyVector[0].begin()->first;
}

になる

void foo()
{
    using namespace std; // limited in scope to foo
    vector< map <int, string> > crazyVector;
    cout << crazyVector[0].begin()->first;
}

Python にも同様のものは存在しますか、それともすべてを完全に修飾する必要がありますか?

使用には落とし穴があり、範囲を適切に制限する必要があることを知っているという免責事項を追加します。

役に立ちましたか?

解決

ビルが言ったように、Pythonは建設を持っている。

from X import *

しかし、あなたはまた、明示的にモジュール(名前空間)から輸入したい名前を指定することができます:

from X import foo, bar, blah

このソースで識別子を見て、誰かがそれがどこから来るのか確認するためにすべてのインポートモジュールを通じて狩りする必要がないため、簡単に理解するために/コードをさらに読みやすくする傾向があります。ここに関連する質問です: Ambuguity の非存在下での名前空間仕様

の編集の:パックスさんのコメントに反応して、私はあなたにも、

のようなものを書くことができることを言及します
import X.foo

が、その後、あなたが書く必要があります。

X.foo.moo()

だけではなく、

foo.moo()

このはもちろん、必ずしも悪いことではありません。私は通常、私は私のコードの最も鮮明になる感じどんなfrom X import yimport X.y形態の混合物を使用しています。それは確かにある程度主観的なものです。

他のヒント

import X

または

from X import *

または

from X import a, b, c

Xは、あなたが使用したいのPythonモジュールであるところます。

あなたは私たちにあなたはニーズがクリーンアップだと思うPythonコードのサンプルを提供することが役立つだろう。

確かに、Pythonのダイナミズムが、これは些細なことができます。あなたが名前空間に深く埋もれたクラスがあった場合:foo.bar.baz.blahを、あなたが行うことができます:

def foo:
    f = foo.bar.baz.blah
    f1 = f()

デビッドの答えに加えて、次のようになります。

  1. 丸括弧を使用する必要があります from X import (foo, bar, blah) のために PEP8.
  2. 完全な構文では、次のように、現在のモジュールのスコープ内でパッケージ名を新しい識別子に名前変更 (再バインド) できます。 from foo import bar as baz.

マニュアルを調べることをお勧めします キーワードをインポートする, 、 __import__ 組み込みと説明 システムモジュール さらに読み物として。

Pythonで別のオプションは、インポート時「と」構造です。たとえばます:

from foo import bar as baz

これは、おそらく同じ名前で、現在のモジュール内の既存のエンティティを隠し避けるために、エンティティが現在のモジュールに別の名前を取得することができ、現在のモジュールでfoo.barようにbazをもたらすでしょう。

なお、

from foo import bar

barfooパッケージのモジュールであっても動作します。これは、あなたが使用することを気にありますfoo.barの各機能/クラスを指定することなく、自分の名前空間の汚染を制限できます。彼らはbar.baz()bazから来たより良いアイデアを持っているコールが表示されますので、それはまた、あなたのコードの読者を支援します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top