【问题标题】:How to convert strings to variables for import? python如何将字符串转换为变量以进行导入? Python
【发布时间】:2014-01-30 18:59:27
【问题描述】:

我可以使用以下代码将字符串更改为变量,然后调用之前导入的库的函数。

>>> import sys
>>> x = 'sys'
>>> globals()[x]
<module 'sys' (built-in)>
>>> globals()[x].__doc__

如果不首先导入模块,我有一个字符串变量,但我不能使用与 import 相同的 globals()[var] 语法:

>>> y = 'os'
>>> globals()[y]
<module 'os' from '/usr/lib/python2.7/os.pyc'>
>>> import globals()[y]
  File "<stdin>", line 1
    import globals()[y]
                  ^
SyntaxError: invalid syntax

>>> z = globals()[y]
>>> import z
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named z

是否可以进行字符串输入,并导入与字符串输入同名的库?如果可以,怎么做?

@ndpu 和@paulobu 已回答__import__() 允许将字符串作为变量访问库。但是使用相同的变量名而不是使用库的替代名称有问题吗?例如:

>>> x = 'sys'
>>> sys = __import__(x)

【问题讨论】:

标签: python syntax import globals


【解决方案1】:

大多数 Python 程序员更喜欢使用 importlib.import_module 而不是 __import__

>>> from importlib import import_module
>>> mod = raw_input(":")
:sys
>>> sys = import_module(mod)
>>> sys
<module 'sys' (built-in)>
>>> sys.version_info # Just to demonstrate
sys.version_info(major=2, minor=7, micro=5, releaselevel='final', serial=0)
>>>

您可以阅读importlib.import_module 优于__import__ here 的偏好。

【讨论】:

  • +1 确实import_module更值得推荐。
  • @alvas - 因为__import__ 是一个非常高级的内置,主要用于自定义 Python 导入模块的方式。如果您的目标只是从字符串中导入模块,那么最好使用为此明确构建的函数。但是请注意,这是 Python 编码器的偏好。有点像列表推导通常比map 的函数式编程更受欢迎。如果你真的想,你仍然可以使用__import__。 :)
【解决方案2】:

使用__import__函数:

x = 'sys'
sys = __import__(x)

【讨论】:

    【解决方案3】:

    您正在寻找__import__ 内置函数:

    __import__(globals()[y])
    

    基本用法:

    >>>math = __import__('math')
    >>>print math.e
    2.718281828459045
    

    您还可以按照另一个答案和__import__ 的文档中的建议查看importlib.import_module

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多