Предположим, у вас есть небольшая программа калькулятора, которая принимает числа и оператор для выполнения на этих числах в качестве входных данных, а затем распечатывает результат применения указанной операции. Поэтому, если вы введете «4 + 5», он выведет «9». Простой, не так ли? Ну, что я хочу, чтобы иметь возможность написать что-то в этом:Вызов встроенных операторов косвенно в Python
a, op, b = raw_input().split()
print somehowInvokeOperator(op, a, b)
Проблема заключается в том, что «somehowInvokeOperator()» часть. Есть ли способ сделать это, не прибегая к (a) eval() или (b) некоторым типам клавиш сопоставления словаря типа «+» и «-» для функций, выполняющих соответствующую операцию? getattr(), похоже, не работает для этого. Мне не нужен этот код для чего-либо, мне просто интересно узнать, можно ли это решить на Python так же элегантно, как на других динамических языках.
Пространства имен в Python в основном реализованы как словари, поэтому даже если 'getattr()' работал, это будет «некоторый тип преобразования словаря». – jfs
Если вы хотите научиться писать компилятор/интерпретатор, посмотрите на это [простое учебное пособие] (http://norvig.com/lispy.html) – erikbwork