Это классический пример того, что говорится в PEP-8 о импорт подстановочных знаков:
Импорта с подстановочными знаками ( from <module> import *
) следует избегать, поскольку они делают неясным, какие имена присутствуют в пространстве имен, что сбивает с толку как читателей, так и многие автоматизированные инструменты.
Проблема в том, что вам нужно работать с sympy.log
, но с использованием функции math.log
, которая работает с объектами float
, а не Symbol
.
Когда вы пишете
from sympy import *
вы импортируете в пространство имен вашего модуля все, что пакет sympy
предоставляет на верхнем уровне (и есть много вещей, большая часть которых вам вообще не нужна), включая класс sympy.log
.
После следующего утверждения
from math import *
вы импортируете все в модуль math
, включая math.log
, который перезаписывает ранее импортированный класс sympy.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
П. С.: Я удалил импорт math
, так как он не используется в данном примере.
person
Azat Ibrakov
schedule
30.05.2017
from math import *
- person Azat Ibrakov   schedule 30.05.2017math
добавляется послеsympy
. Просто поменяйте местами первые две строки, и все готово. Прочитайте это для получения дополнительной информации. - person Adeel Ahmad   schedule 30.05.2017