Python中导入模块/函数的作用域

4 投票
2 回答
6744 浏览
提问于 2025-04-16 10:34

我刚来这里,不太确定怎么问这个问题,所以我就直接说了。请问我在写每个函数的时候,是否应该在开头使用导入语句,把我需要的各种模块或函数都导入进来?比如:

def func1()
    import os.path
    print func(2)
    do something with os.path

def func2()
    import os.path
    do something with os.path

这样做会增加内存开销或者其他开销吗?还是说导入语句只是把一个本地名称和已经加载的对象关联起来?有没有更好的方法来做这个?(如果有教程链接什么的就太好了。我找了很久,但一直找不到好的答案。)

2 个回答

10

通常情况下,所有的导入语句都放在文件的开头。在一个函数内部导入模块的话,这个模块只在这个函数的范围内有效:

def f():
    import sys
    print 'f', sys.version_info

def g():
    print 'g', sys.version_info

if __name__ == '__main__':
    f() # will work
    g() # won't work, since sys hasn't been imported into this modules namespace
8

这个模块在第一次被引入时会被处理;之后再引入的时候,只会复制一个指向本地作用域的引用。为了保持代码的整洁,最好在模块的最上面进行引入;具体的细节可以参考PEP 8。

撰写回答