无法转换表达式

2024-10-17 06:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试学习python中符号操作的来龙去脉(我是一个初学者)。

我有下面的基本代码,输出给了我一个错误,告诉我它“无法将表达式转换为float”。

这个代码有什么问题:

from sympy import *
from math import *

def h(x):
    return log(0.75392 * x)

x = symbols('x')
hprime = h(x).diff(x)

print(hprime)

Tags: 代码fromimportlogreturn表达式def错误
2条回答

这是PEP-8中有关通配符导入的经典示例:

Wildcard imports ( from <module> import * ) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.

问题是您需要使用^{}类,但使用^{}函数而不是^{}对象,而不是^{}对象。

当你写作时

from sympy import *

您正在模块名称空间中导入sympy包在顶层提供的所有内容(有很多东西,很多东西您根本不需要),包括sympy.log类。

下一句话之后

from math import *

您正在导入math模块中的所有内容,包括覆盖先前导入的sympy.log类的math.log

考虑到这一点,你的例子可以写成

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)

给了我们

1.0/x

p.S.:我删除了math导入,因为它在给定示例中没有使用。

这里的问题是sympymath包都定义了一个名为log的函数。

将它们导入为from sympy import *,然后from math import *使用math.log重写sympy.log

最好总是使用import sympy,然后调用函数sympy.log,或者(如果像我一样懒的话)执行import sympy as sym,然后sym.log。一定要用数学软件包。这种方法将在将来为您节省许多麻烦,并使您的代码更容易为其他人理解。

相关问题 更多 >