Python:导入与函数名称相同的模块

作为背景:第一次提出关于SE的问题。 我对Python仍然很陌生,对编程一般也不太熟悉。 我搜索了四周,但我还没有找到这个问题的答案,我非常感谢你的帮助。

我的问题是:如何导入与函数名称相同的模块?

具体来说,我正在使用Python 2.7与Python符号数学库sympy 0.7.5合作。

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导入模块?


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']

这很丑,但它应该工作。 据我所知,这是获取模块本身的最简单方法。


您也可以为模块使用名称空间。

from simpy.simplify import fu as fu_module

这应该工作得很好。

链接地址: http://www.djcxy.com/p/78021.html

上一篇: Python: Importing a module with the same name as a function

下一篇: Linux : Search for a particular word in all the files