从另一个.py文件导入函数不仅可以导入该函数?

时间:2018-07-02 19:08:42

标签: python python-2.7

为说明我遇到的问题,请考虑以下事项。我有两个.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
>>> 

为什么调用打印功能?这不是我导入的功能的一部分!

3 个答案:

答案 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()

请考虑关闭此线程。