模块导入时真正发生了什么?

时间:2013-04-27 09:24:08

标签: python python-2.7 python-2.6 python-import

我导入模块的一部分而不是整点,因为我有兴趣加速我的脚本。

我有一个名为theFile.py

的文件
def goza():
    print vari
    funct()

vari = "called variable"

def funct():
    print "CALLED FUNCTION"

something_else = 12

我是否在我的主要地方:

from theFile import goza

然后运行goza() 它确实具有可变的vari和函数fuct。 这意味着如果我导入:

from theFile import goza

它实际导入整个模块? 但是唯一容易访问的变量是goza? 如何只导入我预期的部分代码? (如果我从theFile import goza做一些事情并使用goza, 这将是一个错误,表示没有变量和函数功能)。

非常感谢!

2 个答案:

答案 0 :(得分:2)

不要担心。

我几乎肯定整个模块被编译成字节码然后读入内存,无论如何。不同的import语句只与哪些类/函数/变量带入全局范围有关。

所以基本上你什么都不担心。这应该对脚本的性能绝对没有影响。花时间寻找其他地方的改进。

答案 1 :(得分:2)

Python将始终在导入时执行整个文件,然后在执行结束时模块范围内的那些变量是可导入的。

如果您的模块的某些部分只是在作为脚本运行时才执行,而不是在导入时运行,那么成语就是使用:

def main():
    code_here

if __name__ == "__main__":
    main()

def goza():
    print vari
    funct()

def main():
    vari = "called variable"

    def funct():
        print "CALLED FUNCTION"

    something_else = 12

if __name__ == "__main__":
    main()

请参阅http://docs.python.org/2/library/main.html