2015-07-27 2 views
2

Я разбор выражения с помощью SymPy и получает следующий след:Синтаксического выражение, содержащее N, используя SymPy

>>> parse_expr("3N", transformations=transformations)` 
TypeError: unsupported operand type(s) for *: 'Integer' and 'function' 

Из того, что я мог собрать, это происходит потому, что N рассматривается как функция парсера и не просто как любая другая строка. Код отлично работает с несколькими другими символами, которые я тестировал.

Может кто-нибудь объяснить кратко, почему это происходит? Есть ли список ключевых слов или символов, которые не могут быть проанализированы с использованием parse_expr?

+0

Вы должны показать свое определение 'N'. – mdurant

+0

N - это просто часть строки. Я предполагаю, что идея parse_expr заключается в преобразовании символов в символы. Мэтт ответил ниже на месте. – BombayBlue

ответ

2

Цитируя Документов (pitfalls and gotchas):

Наконец, рекомендуется не использовать I, E, S, N, C, O, или Q для имен переменных или символов, а те используется для ... числовая оценка (N() эквивалентна evalf()) ... Или еще лучше, всегда используйте строчные буквы для имен символов. Python не помешает вам переопределять имена или функции по умолчанию Sympy, поэтому будьте осторожны.

+0

Спасибо Мэтт. Это немного смущает, что я пропустил это немного, проходя через документацию. Возможно, этот бит также следует упомянуть в разделе ключевых слов вместе с разделом символов. :) – BombayBlue

+0

Добро пожаловать, рад, что смогу помочь. Это, конечно, было нелегко найти. – Matt

Смежные вопросы