如何强制Python的“导入”将名称视为模块而不是函数?

用户541686

我正在使用SymPy,并遇到以下问题:

>>> import sympy.utilities.lambdify
>>> sympy.utilities.lambdify
<function lambdify at 0x0000000003802B38>

等等,不应该sympy.utilities.lambdify是一个模块吗?

>>> from sympy.utilities.lambdify import implemented_function
>>> implemented_function
<function implemented_function at 0x0000000003802CF8>
>>> implemented_function.__module__
'sympy.utilities.lambdify'

哦,所以有一个命名冲突。

现在显然我可以使用implemented_function,但这不是我的问题。

我的问题是:如何导入sympy.utilities.lambdify 模块而不是函数

(我只是在这里用SymPy进行说明。这是否是正确的库用法不重要。来源在这里。)

op

实际上,看起来可以使用importlib完全干净地完成此操作:

import importlib
lamdify = importlib.import_module('sympy.utilities.lambdify')
print lambdify
  <module 'sympy.utilities.lambdify' from 'c:\python-2.7.8-amd64\lib\site-packages\sympy\utilities\lambdify.pyc'>

编辑评论(感谢@Mehrdad):

或者,如果要避免将模块名称放在字符串中,可以执行以下操作:

def import_module(lambda_): 
    import importlib; 
    return importlib.import_module('.'.join(lambda_.__code__.co_names)) 

用法: lambdify = import_module(lambda: sympy.utilities.lambdify)

虽然这对我来说看起来更长一些,也不太清楚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

导入模块错误不是函数?

Python动态导入-如何从变量中的模块名称中导入*?

如何使用__import__函数从子模块导入名称?

导入时强制转换类的名称,以防止出现“不是构造函数”错误

如何在TypeScript中将名称空间与导入配合使用

如何导入包(不是模块)?

webpack导入的模块不是构造函数

TypeError:Webpack导入的模块不是函数

如何导入python模块?

如何导入模块python

将名称传递给Python中的嵌套函数?

如何从导入的模块导出函数?

从Python模块导入隐藏函数

如何使用以下命名约定导入Bash函数:“ [模块] :: [函数名称]”?

HTML到Python-数据被视为字符串而不是列表-如何强制Python处理为多维列表

如何将名称作为字符串提供的函数添加到python中的类?

如何列出Python模块的所有函数而忽略模块导入的函数?

在python中导入模块后如何获取模块的完整名称空间

如何强制intelliJ使用分类器将Maven依赖项导入为“ Maven库”而不是“ Intellij模块”

如何查找名称从哪个模块导入?

如何从 import * 导入类,而不是模块

获取正在导入模块的 python 脚本的名称

强制执行hg更新以将数字值视为分支名称而不是文本

如何用指定的模块名称作为函数的参数在函数中创建(全局)Python模块?

如何取消导入Python模块?

如何仅通过导入模块就可以调用 python 模块函数

如何将名称空间与TypeScript外部模块一起使用?

导入模块,名称与python 3中的内置模块相同

Python导入-参考顶层模块,而不是“层内”模块