在函数内部给出导入sys没有导入[Python]

时间:2016-02-05 07:05:42

标签: python python-2.7

generic_import.py

def var_import():
  import sys
  import glob

main.py

from generic_import import *
var_import()

每当我运行主文件时,我都会

NameError:名称'sys'未定义

但是当import sys在函数之外时,代码执行时没有任何错误。

generic_import.py

import sys
def var_import():
   import glob

这背后的原因是什么?我想在功能中导入它。

1 个答案:

答案 0 :(得分:2)

原因是Imports的Scope

您正在函数内导入库,因此这些库的范围是var_import,一旦函数终止,范围就会被丢弃。您需要return导入的库,然后将它们保存在您想要使用它们的范围内。

但我会根据需要推荐import个库,而不需要generic_import个功能。

如果您担心命名空间冲突:您可以始终使用import sys as python_builtin_sys之类的别名,但我也不建议这样做。

由于您询问了如何将模块置于函数范围之外,我将提供一个简短的示例代码。

def var_import():
    import sys
    import glob
    return sys, glob

你可以通过以下方式将它们放入你想要的范围:

from generic_import import var_import  # Do not use "import *"
sys, glob = var_import()
如果你不知道加载模块的数量,那么

或更高级的东西。