Ich implementiere ein Programm, das eine RPN-Rechner-Funktion benötigt, ich habe die eine unten, aber neu zu Python Ich frage mich, ob ich es optimieren kann, ohne die Lesbarkeit zu verlieren.RPN Evaluator Optimierung ohne Lesbarkeit zu verlieren
einige Lösungen gefunden Wörterbücher und so weiter, aber ich habe in den ‚Pythonesque‘ Teile verloren, sind die Listen noch so etwas wie ein Geheimnis zu mir ...
meine Funktion ist:
def parseRPN(expression):
"""Parses and calculates the result fo an RPN expression
takes a list in the form of ['2','2','*']
returns 4
"""
try:
stack = []
for val in expression:
if val in ['-', '+', '*', '/']:
op1 = stack.pop()
op2 = stack.pop()
if val=='-': result = op2 - op1
if val=='+': result = op2 + op1
if val=='*': result = op2 * op1
if val=='/':
if op1==0:
result=1
else:
result = op2/op1
stack.append(result)
elif val in ['sin','cos']:
op1 =stack.pop()
if val=='sin': result = sin(op1)
if val == 'cos': result = cos(op1)
stack.append(result)
else:
stack.append(float(val))
return stack.pop()
except:
print('error parse RPN fn:parse_rpn :' + str(expression))
return 10*10**10
Vielen Dank im Voraus
Der grundlegende Ansatz ist in Ordnung. Wenn es funktioniert, warum willst du dich damit anlegen? Brauchst du es wirklich, um schneller zu sein? Unter der Annahme, dass der Formeleintrag von einem Benutzer kommt, der tippt, wird die Antwort sicherlich sofort für alle praktischen Zwecke sein. Und wenn Sie an eine Änderung denken, die den Code schwerer lesbar und verständlich macht, gehen Sie einfach nicht dorthin. –
Hallo. Diese Funktion wird tausende Male von anderen Funktionen aufgerufen. Es sieht auch gut für mich aus. Aber da ich neu in Python bin, könnte es etwas geben, was ich tat, was einen großen Leistungsabfall zur Folge hatte. –
Macht Sinn, danke für die zusätzlichen Informationen. Ich würde es immer noch versuchen und sehen, ob es schnell genug ist, bevor ich etwas anderes mache. Bei einer Schätzung würde ich erwarten, dass die Umwandlung von string in float '(float (val))' hier länger dauert als alles andere. –