3

タイトルにあるように、メインファイルにインポートしたモジュールにモジュールを再インポートする必要がありますか?これについては何も見つかりませんし、どちらを検索すればよいかわかりません。叙事詩でotherepicをインポートするまでこれは機能しません

file1:

import epicness
import otherepic

epicness.someother(3)

叙事詩:

def someother(x):
    return dosomething(x)

otherepic:

def dosomething(x):
    return x*4
4

1 に答える 1

4

はい、すべてのモジュールに必要なものをすべてインポートする必要があります。で定義されmodule_aた関数を使用する場合は、内部にインポートするか、少なくともから関数をインポートする必要があります。Bmodule_bmodule_bmodule_aBmodule_b

説明:

Pythonではモジュールはオブジェクトです!モジュールをインポートすると、そのコードが実行され、そこで定義されるすべてのものがモジュールオブジェクトの__dict__:にアタッチされます。

$ echo 'a=1' > testing.py
$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import testing
>>> 'a' in testing.__dict__
True

モジュール__dict__には、通常のグローバルビルトインも含まれています。モジュール内で定義されているものはすべて、モジュール__dict__をグローバルスコープとして使用します。Pythonには、すべてのモジュール/クラス/関数からアクセス可能な変数を意味する「グローバル変数」のようなものはありません。グローバル変数は、実際にはモジュールのインスタンス変数にすぎません。

モジュールから他のモジュールの名前空間にいくつかのアイテムをインポートする場合は、次のfrom構文を使用できます。

from module_a import functionA, functionB, classA, CONSTANT

*:を使用してすべてをインポートできます。

from module_a import *

ただし、from ... import *構文の使用は避けてください。Cインクルードのように名前空間の衝突が発生します。これは、モジュールがドキュメントに*-importsafeであると記載されている場合にのみ実行してください。モジュールを*-importセーフにするために、グローバルを定義できます。これは、 -importの実行__all__時にエクスポートする必要がある識別子を表す文字列のシーケンスである必要があります。*

例えば:

#module_a
A = 1
B = 2
__all__ = ['A']

#module_b
from module_a import *
print(A)   #okay
print(B)   #NameError, B was not exported!
于 2012-10-28T13:10:15.463 に答える