Некоторая путаница с импортом в Python

Я новичок в Python, и что-то меня беспокоит уже довольно давно. Я читал в «Learning Python» Марка Лутца, что когда мы используем оператор fromдля импорта имени, присутствующего в модуле, он сначала импортирует модуль, а затем присваивает ему новое имя (, то есть имя функции., класс и т. д. присутствуют в импортированном модуле ), а затем удаляет объект модуля с помощью оператора del. Однако что произойдет, если я попытаюсь импортировать имя, используя from, которое ссылается на имя в импортированном модуле, который сам не импортирован? Рассмотрим следующий пример, в котором есть два модуля mod1.pyи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.

Поэтому мне в основном нужно знать, почему этот код работает, хотя, учитывая проблемы, о которых я упоминал, этого не должно быть.

РЕДАКТИРОВАТЬ :Большое спасибо всем, кто ответил:)

6
задан Wooble 14 August 2012 в 19:52
поделиться