Python-альтернатива функции Matlab symvar - PullRequest
1 голос
/ 20 октября 2011

В Matlab есть функция symvar, которая принимает строковое выражение, обычно содержащее правильные инструкции matlab, и идентифицирует переменные. Затем они могут быть обработаны / заменены для оценки выражения.

Например:

symvar('cos(pi*x - beta1)')

возвращает

{'beta1';'x'}

Есть ли подобная функциональность в Python?

Вот пример того, как я мог бы использовать это: скажем, у меня есть DataFrame DF (в данном случае я имею в виду модуль pandas, но я полагаю, что это также относится и к numpy recordarray), содержащий набор переменных, например, A, B, C. Я хочу, чтобы мой пользователь мог добавить дополнительный столбец, указав что-то вроде

add_field (DF, "D = журнал (А) + С * 3")

Внутренне, функция распознает A, C и D как переменные, извлечет A и D из кадра данных, выполнит вычисление (используя eval или подобное), а затем добавит D в качестве нового столбца в кадр данных.

Спасибо

1 Ответ

3 голосов
/ 20 октября 2011

Один из способов получить список идентификаторов из выражения Python - использовать модуль ast:

import ast
class IdentifierExtractor(ast.NodeVisitor):
    def __init__(self):
        self.ids = set()
    def visit_Name(self, node):
        self.ids.add(node.id)
extractor = IdentifierExtractor()
extractor.visit(ast.parse("cos(pi*x - beta1)"))
print extractor.ids

print

set(['x', 'cos', 'pi', 'beta1'])

Вы также можете исключить определенные именав модуле math (или любом другом пространстве имен):

print extractor.ids - set(vars(math))

печатает

set(['beta1', 'x'])

(обратите внимание, что я до сих пор не понимаю, для чего все это может быть полезно...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...