Списки могут использоваться непосредственно в качестве стеков:
>>> stack = []
>>> stack.append(3) # push
>>> stack.append(2)
>>> stack
[3, 2]
>>> stack.pop() # pop
2
>>> stack
[3]
Вы также можете поместить функции оператора непосредственно в ваш диктофон ARITHMETIC_OPERATORS:
ARITHMETIC_OPERATORS = {"+":operator.add,
"-":operator.sub,
"*":operator.mul,
"/":operator.div,
"%":operator.mod,
"**":operator.pow,
"//":operator.floordiv}
затем
if operators.has_key(val):
method = operators[val]
Цель этого состоит не в том, чтобы сделать вещи более эффективными (хотя это может иметь такой эффект), а в том, чтобы сделать их более очевидными для читателя.Избавьтесь от ненужных уровней косвенности и обёрток.Это сделает ваш код менее запутанным.Это также обеспечит (тривиальные) улучшения производительности, но не верьте этому, если вы не измеряете ее.
Кстати, использование списков в качестве стеков довольно распространено идиоматический Python.