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
这背后的原因是什么?我想在功能中导入它。
答案 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()
如果你不知道加载模块的数量,那么或更高级的东西。