Skip to main content
 首页 » 编程设计

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

2025年05月04日16youxin

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

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 ....