Я новичок в 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
.
Поэтому мне в основном нужно знать, почему этот код работает, хотя, учитывая проблемы, о которых я упоминал, этого не должно быть.
РЕДАКТИРОВАТЬ :Большое спасибо всем, кто ответил:)