10

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にも同様のものが存在しますか、それともすべてを完全に修飾する必要がありますか?

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

4

6 に答える 6

19

ビルが言ったように、Pythonには構造があります

from X import *

ただし、モジュール (名前空間) からインポートする名前を明示的に指定することもできます。

from X import foo, bar, blah

これにより、コードがさらに読みやすく/理解しやすくなる傾向があります。ソース内の識別子を見た人は、インポートされたすべてのモジュールを調べて、それがどこから来たのかを調べる必要がないからです。関連する質問は次のとおりです。あいまいさがない場合の名前空間の仕様

編集:Paxのコメントに応えて、次のようなものも書くことができることに言及します

import X.foo

しかし、その後、あなたは書く必要があります

X.foo.moo()

ただの代わりに

foo.moo()

もちろん、これは必ずしも悪いことではありません。from X import y私は通常、との形式を組み合わせて使用​​しますimport X.yが、コードが最も明確になると思われるものは何でも使用します。それは確かにある程度主観的なものです。

于 2009-02-15T01:58:04.147 に答える
7

確かに、python のダイナミズムはこれを簡単にします。foo.bar.baz.blah という名前空間の奥深くに埋め込まれたクラスがある場合は、次のことができます。

def foo:
    f = foo.bar.baz.blah
    f1 = f()
于 2009-02-15T01:56:14.977 に答える
6
import X

また

from X import *

また

from X import a, b, c

X は、使用する Python モジュールです。

クリーンアップが必要だと思われる Python コード サンプルを提供していただけると助かります。

于 2009-02-15T01:54:18.320 に答える
1

Davidの答えに加えて:

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

import キーワードのマニュアル、__import__ビルトイン、およびsys.modulesの説明をさらに読むことをお勧めします。

于 2012-01-06T07:35:28.173 に答える
0

ご了承ください

from foo import bar

パッケージbar内のモジュールであっても機能します。fooこれにより、使用したい各関数/クラスに名前を付けることなく、名前空間の汚染を制限できますfoo.bar。また、コードの読者が への呼び出しを確認し、どこから来たbar.baz()のかをよりよく理解できるようになるため、コードの読者にも役立ちます。baz

于 2009-02-15T05:23:17.197 に答える