背景资料:第一次在SE上提问。我仍然是Python的新手,总体上对编程还不是很有经验。我已经找遍了,但还没有找到这个问题的答案,我将非常感谢你的帮助。
我的问题是:如何导入与函数同名的模块?
具体地说,我使用的是Python符号数学库sympy 0.7.5,使用的是Python2.7。
Sympy的结构是这样的:
sympy
|
+-- __init__.py
+-- simplify
|
+-- __init__.py
+-- simplify.py
| |
| +-- def simplify(...)
|
+-- fu.py
|
+-- def TR8(...)
+-- def fu(...)我要做的是从这个结构中导入fu.py,这样我就可以调用TR8函数了。然而,我没有太多的运气。
这是可行的:
from sympy.simplify.fu import *
TR8(some_expression)到目前为止,这是我能够访问TR8的唯一方式,但我知道这不是推荐的方式。
以下尝试失败:
from sympy.simplify import fu
fu.TR8(some_expression)
>>AttributeError: 'function' object has no attribute 'TR8'
from sympy import fu
fu.TR8(some_expression)
>>AttributeError: 'function' object has no attribute 'TR8'我不确定,但在我看来,Python似乎认为我正在尝试导入名为fu的函数,而不是名为fu的模块。同样,当我这样尝试时:
import sympy.simplify.fu as fu
>>AttributeError: 'function' object has no attribute 'fu'这里Python似乎认为我在谈论的是函数sympy.simplify.simplify,而不是模块sympy.simplify。
那么,当一个模块包含与该模块同名的函数时,有没有一种适当的方式让Python导入该模块呢?
发布于 2014-03-13 18:17:18
sympy/simplify/__init__.py包含以下行:
from .fu import FU, fu这通过将fu函数分配到预期模块所在的位置来隐藏fu模块,从而阻止了导入它的大多数方式。
如果您只需要TR8函数,则可以导入该函数:
from sympy.simplify.fu import TR8如果需要fu模块,则在sys.modules中保留一个条目
import sympy.simplify.fu
import sys
fu_module = sys.modules['sympy.simplify.fu']虽然很难看,但应该能行得通。据我所知,这是获取模块本身的最简单方法。
发布于 2017-09-04 17:39:57
您还可以使用模块的命名空间。
from simpy.simplify import fu as fu_module这应该可以很好地工作。
https://stackoverflow.com/questions/22374155
复制相似问题