背景:
我正在写一个针对pypy的符号包,用于表示表达式和获取导数。目前不致力于简化或诸如此类的工作,只是区分和评估。你知道吗
问题:
我正在编写表达式类来表示数学中的许多函数(sqrt、log、exp、sin、cos等)。我已经命名了这个在math
中运行的模块,以与您自然找到所述函数的模块一致。我将来可能会对cmath
和任何其他数学感兴趣的模块做同样的事情。我的模块是更大的包ldb.algebra
的一部分,因此名称math
不会与基命名空间中的任何内容发生冲突。但是,为了计算表达式,我需要在ldb.algebra.math
模块中导入系统math
模块,而我不能在我的math
模块(或者在相同级别的包中的任何其他模块)中这样做。以下是我目前的基本路线:
ldb/
__init__.py - empty
algebra/
__init__.py - empty
math.py
ldb/代数内容/数学.py作为问题的一个例子:
import math
my_sin = math.sin
显然不是很有用,但它显示了这个想法。我正在使用python2(或者说pypy代表python2)。我发现我可以通过创建一个子包来解决这个问题,在这个子包下创建一个模块,比如说sys_math
,在这个模块中导入math
,并公开必要的函数,但是这看起来是一个很大的工作和难看的混乱。你知道吗
所以我的问题是:我能在仍然有一个名为ldb.algebra.math
的模块的情况下得到系统math
模块吗?可能是__init__.py
文件中的一些有趣的东西,比如使模块数学化,然后以某种方式更改__init__.py
中的名称,或者以某种特殊的方式导入系统模块而不是我自己。你知道吗
到目前为止,我丑陋的解决方案是:
ldb/
algebra/
extra_package/
__init__.py - empty
sys_math.py
系统内容_数学.py地址:
import math
sin = math.sin
将其放在模块的顶部以禁用隐式相对导入。然后
import math
将导入内置的math
模块,如果要使用相对导入,则必须使用from . import math
这样的语法显式地进行导入。你知道吗相关问题 更多 >
编程相关推荐