私はPythonを初めて使用しますが、かなり長い間私を悩ませてきたことがあります。MarkLutzによる「LearningPython」で、from
ステートメントを使用してモジュールに存在する名前をインポートすると、最初にモジュールがインポートされ、次に新しい名前(つまり、関数、クラスなどの名前)が割り当てられることを読みました。インポートされたモジュールに存在します)、del
ステートメントを使用してモジュールオブジェクトを削除します。しかしfrom
、それ自体がインポートされていないインポートされたモジュール内の名前を参照する名前を使用してインポートしようとするとどうなりますか?mod1.py
2つのモジュールがあり、次の例を考えてみましょうmod2.py
。
#mod1.py
from mod2 import test
test('mod1.py')
#mod2.py
def countLines(name):
print len(open(name).readlines())
def countChars(name):
print len(open(name).read())
def test(name):
print 'loading...'
countLines(name)
countChars(name)
print '-'*10
次に、mod1を実行またはインポートするとどうなるかを確認します。
>>>import mod1
loading...
3
44
----------
ここで、関数をインポートして実行すると、またはをtest
インポートしていなくても正常に実行され、ステートメントはすでにモジュールオブジェクトを削除していました。countChars
countLines
from
mod2
したがって、私が述べた問題を考慮しても、このコードが機能する理由を基本的に知る必要があります。
編集:答えたすべての人に感謝します:)