【发布时间】:2017-08-04 17:31:06
【问题描述】:
假设我导入以下两个模块如下:
from sympy import *
from numpy import *
两个模块都定义了exp() 函数。 python 如何选择使用哪一个?如上所述导入模块后,有没有办法区分这些功能?在这种情况下,存在什么机制来警告用户?考虑IDLE中的以下命令集
=============================== RESTART: Shell ===============================
>>> from sympy import *
>>> from numpy import *
>>> exp(5)
148.4131591025766
>>> c = symbols('c')
>>> exp(c)
Traceback (most recent call last):
File "<pyshell#162>", line 1, in <module>
exp(c)
AttributeError: 'Symbol' object has no attribute 'exp'
>>>
=============================== RESTART: Shell ===============================
>>> from sympy import *
>>> c = symbols('c')
>>> exp(c)
exp(c)
似乎默认情况下 python 使用numpy 中的exp() 定义,但是当它被sympy 识别的对象类型调用时,它会引发一个错误,从而呈现sympy.exp()功能无法使用。
对于这种情况,我知道这两个包中都存在这些函数,但如果我不这样做怎么办?应该有一些机制来警告用户避免真正令人困惑的情况......python社区如何处理这个问题?
【问题讨论】:
-
你需要使用import as
-
关于您看到的错误:NumPy 的
exp在所有情况下都被使用。错误来自函数期望一个数组或类似数组的对象作为参数的事实。在某些时候,NumPy 的exp在传递的参数上调用exp方法,这会导致错误,因为SymPy 的Symbols,如所示,没有这样的方法。