8

次の内容のモジュール/ファイルがある場合foo.py:

from math import sqrt

def foo():
    pass

別のスクリプトにインポートするとsqrt、モジュール内でも定義されますfoo

import foo    
dir(foo)

その出力は

[..., # other things
 'foo',
 'sqrt']

これを防ぐにはどうすればよいですか?つまり、sqrtエクスポートしないように指定するか、特定の関数のみ (この場合はユーザー定義の関数のみ) をエクスポートします。ユーザー定義関数については、アンダースコアをプレフィックスとしてモジュール内でプライベートに定義できることを知っていますが、この場合はユーザー定義関数ではないため、アンダースコアプレフィックスを使用して定義することはできません。

4

4 に答える 4

6

この場合、これはユーザー定義関数ではないため、アンダースコア プレフィックスを使用して定義することはできません。

はい、次のことができます。

from math import sqrt as _sqrt

別の方法は、必要な関数スコープ内のオブジェクトのみをインポートすることです。

(これはあなたの質問に答えるかもしれませんが、なぜそれをしたいのか、私にはまだわかりません。どちらのオプションも扱いにくく、コードベースの見栄えを良くすることはありません。)

于 2013-01-12T16:27:50.603 に答える
6

できませんが、邪魔になることはありませんfoo。.として名前空間にバインドされていますfoo.sqrtsqrtそこからインポートするmathと になりますmath.sqrt。それが名前空間の要点です。

特定の名前をインポートしたくない場合は、次のようにします。

from foo import foo, bar, ...

于 2013-01-12T16:23:46.997 に答える
1

以下を使用する必要があります。

from math import sqrt as sqrt_m
import foo

だから、あなたが使用することができます

sqrt_m()とからsqrtを取得するmath_ sqrt()sqrtfoo

于 2013-01-12T16:29:21.637 に答える