我是 Python 新手,有一些事情困扰了我很长一段时间。我在 Mark Lutz 的“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
or countLines
,但它运行成功,并且from
语句已经删除了mod2
模块对象。
所以我基本上需要知道为什么这段代码可以工作,即使考虑到我提到的问题它不应该。
编辑:非常感谢所有回答的人:)