方法之内/之外的导入是否存在差异?

时间:2014-01-04 20:44:32

标签: python

这两种进口产品有什么区别吗?除了进口范围。

内部或外部导入
当然,如果外部已存在

,则内部导入将无用
import os

class foo(object):
    def bar(self):
        import os
        path = os.path.join('foo', 'bar')

2 个答案:

答案 0 :(得分:3)

他们在不同的时间被执行。函数内部仅在执行方法时执行,并且每次调用方法时都会执行。这通常不是一个问题(通常,模块只加载一次,你只是得到另一个对同一个对象的引用),但有些人可能会发现它在哲学上是令人反感的,并且如果其他代码可以有不同的行为用sys.modules或导入钩子做蠢事。

例外情况是from ... import *除了模块级别之外:在Python 3中它非常气馁甚至是非法的。

答案 1 :(得分:0)

那么id明智的对象是相同的,这意味着它们都指的是同一个模块对象。

在方法中导入它似乎没有意义。由于os已经在模块的global范围内,因此无论您是否在os内导入bar,都不会产生任何影响。是的,如果你这样做而且bar是多次调用的函数,那么import os会对性能产生轻微影响。