<p>这是<a href="https://www.python.org/dev/peps/pep-0008/#imports" rel="nofollow noreferrer">PEP-8</a>中有关通配符导入的经典示例:</p>
<blockquote>
<p>Wildcard imports ( <code>from <module> import *</code> ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.</p>
</blockquote>
<p>问题是您需要使用<a href="http://docs.sympy.org/dev/modules/functions/elementary.html#sympy.functions.elementary.exponential.log" rel="nofollow noreferrer">^{<cd1>}</a>类,但使用<a href="https://docs.python.org/3/library/math.html#math.log" rel="nofollow noreferrer">^{<cd2>}</a>函数而不是<a href="https://docs.python.org/3/library/functions.html#float" rel="nofollow noreferrer">^{<cd3>}</a>对象,而不是<a href="http://docs.sympy.org/dev/modules/core.html#sympy.core.symbol.Symbol" rel="nofollow noreferrer">^{<cd4>}</a>对象。</p>
<p>当你写作时</p>
<pre><code>from sympy import *
</code></pre>
<p>您正在模块名称空间中导入<code>sympy</code>包在顶层提供的所有内容(有很多东西,很多东西您根本不需要),包括<code>sympy.log</code>类。</p>
<p>下一句话之后</p>
<pre><code>from math import *
</code></pre>
<p>您正在导入<code>math</code>模块中的所有内容,包括覆盖先前导入的<code>sympy.log</code>类的<code>math.log</code>。</p>
<p>考虑到这一点,你的例子可以写成</p>
<pre><code>import sympy
def h(x):
return sympy.log(0.485022 * x)
x = sympy.symbols('x')
h_x = h(x)
hprime = h_x.diff(x)
print(hprime)
</code></pre>
<p>给了我们</p>
<pre><code>1.0/x
</code></pre>
<p><strong>p.S.</strong>:我删除了<code>math</code>导入,因为它在给定示例中没有使用。</p>