python - 关于在 python 中导入模块和方法名称

标签 python numpy sympy

假设我按如下方式导入以下两个模块:

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/

相关文章:

python - Graphviz/Python : Recoloring a single node after it has been generated

python - 如何以内存有效的方式在Python中将矩阵一分为二?

python - 屏蔽 numpy 数组时出现 MemoryError

python - 如何使用 numpy 从 RGB 图像中删除折线

python - 检测变量是否为 sympy 类型

python - 生成列表元素产品的序列

python - 双击屏幕时 pygame 崩溃

python - 正确使用字典值的 getter/setter

python - networkx中有没有一种方法可以通过聚类系数获取前10个节点?

python - 非常基本的 SymPy 错误