为说明我遇到的问题,请考虑以下事项。我有两个.py文件,一个名为main.py,另一个名为testfuction.py。它们都在同一目录中。
main.py的内容:
from testfunction import mytestfunction
mytestfunction()
testfunction.py的内容:
def mytestfunction():
for number in range(0,10):
print number
print "Hi"
我的印象是,导入功能只会导入该功能。但是,当我运行main.py时,这就是我得到的:
Hi
0
1
2
3
4
5
6
7
8
9
>>>
为什么调用打印功能?这不是我导入的功能的一部分!
答案 0 :(得分:6)
给我的印象是,导入功能只会导入该功能。
您不正确。
第一次导入模块时,导入语句将执行整个模块,包括任何全局级别的打印语句。随后导入同一模块将重新使用sys.modules
中缓存的现有模块,这可能是您误解了整个模块未执行的原因。
通常,您会发现不打算在导入时执行的代码位于条件内部,例如:
def mytestfunction():
for number in range(0,10):
print number
if __name__ == "__main__":
print "Hi"
答案 1 :(得分:3)
为了从模块中导入某些内容,Python需要首先加载此模块。那时,所有模块级别的代码都已执行。
根据docs:
一个模块可以包含可执行语句和函数 定义。这些语句旨在初始化模块。 仅在第一次遇到模块名称时执行它们 在导入语句中。
答案 2 :(得分:3)
这个问题似乎与this one相同。
简而言之:导入模块时,将调用python文件的所有代码。通常既不是函数也不是类的东西放在这里称为 main 的函数中:
if __name__ == "__main__":
# stuff only to run when not called via 'import' here
main()
请考虑关闭此线程。