假设我按如下方式导入以下两个模块:
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 使用exp()
numpy
中的定义然而,当它被 sympy
识别的对象类型调用时它抛出一个错误,呈现 sympy.exp()
功能无法使用。
对于这种情况,我知道这两个包中都存在这些函数,但如果我不知道呢?应该有一些机制来警告用户避免真正令人困惑的情况......python 社区如何处理这个问题?
最佳答案
它不会“挑选”。当您执行 from sympy import *
时,它会将所有名称从 sympy 导入到当前 namespace ;当你执行 from numpy import *
时,它会做同样的事情。之前定义的任何内容都将被覆盖。这与您所做的完全相同:
foo = 'bar'
foo = 'baz'
很明显,foo
现在的值为“baz”,即使您最初将其定义为“bar”也是如此。
解决方案是不要这样做;你应该明确地导入你需要的东西:
from sympy import exp, ....
from numpy import ....
关于python - 关于在 python 中导入模块和方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502124/