Python 运算符

标签 python operators

<分区>

这几天在学习Python,写了这段代码来计算后缀表达式。

postfix_expression = "34*34*+"

stack = []

for char in postfix_expression :
    try :
        char = int(char);
        stack.append(char);
    except ValueError:
        if char == '+' :
            stack.append(stack.pop() + stack.pop())
        elif char == '-' :
            stack.append(stack.pop() - stack.pop())
        elif char == '*' :
            stack.append(stack.pop() * stack.pop())
        elif char == '/' :
            stack.append(stack.pop() / stack.pop())

print stack.pop()

有没有办法避免巨大的 if else block ?比如,是否有模块采用字符串形式的数学运算符并调用相应的数学运算符或一些使这变得简单的 python 惯用语?

最佳答案

operator模块具有实现标准算术运算符的功能。有了它,您可以设置一个映射,例如:

OperatorFunctions = {
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
    '/': operator.div,
    # etc
}

然后你的主循环看起来像这样:

for char in postfix_expression:
    if char in OperatorFunctions:
        stack.append(OperatorFunctions[char](stack.pop(), stack.pop()))
    else:
        stack.append(char)

您需要注意确保减法和除法的操作数以正确的顺序从堆栈中弹出。

关于Python 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090863/

相关文章:

python - 分离然后加入 .wav 立体声 channel 时出现断断续续的音频

c - 三元运算符

python - "is"运算符对整数的行为异常

c - (*&) 是左值还是 r 值?

python multiprocessing - 暂停工作函数,直到队列有另一个数据要处理

python - 在长时间运行的任务中保持 GUI 响应

python - 用于 Pandas `idxmax` 方法的时间复杂度/算法

perl - 有条件地将元素包含在列表中的最佳方法是什么?

c++ - 比较运算符重载

python - 确定给定的类属性是否为属性,Python 对象