将 x = _import_("y") 与字典值一起使用时调用模块时出错
Error calling modules when using x = _import_("y") with dictionary values
我无法理解使用 Python 中的 __import_ 函数导入包后调用包的问题。我会注意到使用通常的 import x as y
效果很好,但这对我来说是一个学习练习。我正在导入,然后检查多个包的版本,并了解更多关于 Python 的信息,我想通过使用字典来自动执行此操作。
我的字典是这样的:
pack = {"numpy": ["np", "1.7.1"]}
然后我用它来加载和检查模块:
for keys in pack.keys():
pack[keys][0] = __import__(keys)
print("%s version: %6.6s (need at least %s)" %(keys, pack[keys][0].__version__, pack[keys][1]))
这工作正常,但是当我稍后尝试调用包时,它无法识别它:x = np.linspace(0,10,30)
产生一个错误,说 np 无法识别,但这有效:x = pack[keys][0].linspace(0,10,30)
因为这只是我学习的一种方式,所以我也对任何可以改变我处理问题方式的解决方案感兴趣。我选择了字典,因为我至少听说过它们,并且我使用了 _import__ 函数,因为我被迫在我的字典值中使用引号字符或数字值。引用的字符给 import x as y
技术带来了问题。
虽然这不是一个好习惯,但您可以使用内置的 locals
函数动态创建变量。
所以,
for module, data in pack.items():
locals()[data[0]] = __import__(module)
nickname = locals()[data[0]]
print("%s version: %6.6s (need at least %s)" %(module, nickname.__version__, pack[module][1]))
输出:
numpy version: 1.12.1 (need at least 1.7.1)
我无法理解使用 Python 中的 __import_ 函数导入包后调用包的问题。我会注意到使用通常的 import x as y
效果很好,但这对我来说是一个学习练习。我正在导入,然后检查多个包的版本,并了解更多关于 Python 的信息,我想通过使用字典来自动执行此操作。
我的字典是这样的:
pack = {"numpy": ["np", "1.7.1"]}
然后我用它来加载和检查模块:
for keys in pack.keys():
pack[keys][0] = __import__(keys)
print("%s version: %6.6s (need at least %s)" %(keys, pack[keys][0].__version__, pack[keys][1]))
这工作正常,但是当我稍后尝试调用包时,它无法识别它:x = np.linspace(0,10,30)
产生一个错误,说 np 无法识别,但这有效:x = pack[keys][0].linspace(0,10,30)
因为这只是我学习的一种方式,所以我也对任何可以改变我处理问题方式的解决方案感兴趣。我选择了字典,因为我至少听说过它们,并且我使用了 _import__ 函数,因为我被迫在我的字典值中使用引号字符或数字值。引用的字符给 import x as y
技术带来了问题。
虽然这不是一个好习惯,但您可以使用内置的 locals
函数动态创建变量。
所以,
for module, data in pack.items():
locals()[data[0]] = __import__(module)
nickname = locals()[data[0]]
print("%s version: %6.6s (need at least %s)" %(module, nickname.__version__, pack[module][1]))
输出:
numpy version: 1.12.1 (need at least 1.7.1)