在Python中编写一个函数，用于计算给定的表达式。
def evaluate_expression(expression): 
      
    # 用于存储整数值的堆栈 
    values = [] 
  
    # 用于存储运算符的堆栈 
    ops = [] 
    i = 0
      
    while i < len(expression): 
          
        # 当前标记是空格，跳过它。
        if expression[i] == ' ': 
            i += 1
            continue
              
        # 当前标记是开括号，将其推入 'ops' 堆栈 
        elif expression[i] == '(': 
            ops.append(expression[i]) 
              
        # 当前标记是数字，将其推入数字堆栈。
        elif expression[i].isdigit(): 
            val = 0
              
            # 数字中可能有多个数字。
            while (i < len(expression) and
                expression[i].isdigit()): 
                  
                val = (val * 10) + int(expression[i]) 
                i += 1
                  
            values.append(val) 
  
        # 遇到右括号，解决整个括号。
        elif expression[i] == ')': 
              
            while len(ops) != 0 and ops[-1] != '(': 
                  
                val2 = values.pop() 
                val1 = values.pop() 
                op = ops.pop() 
                  
                values.append(performOp(val1, val2, op)) 
              
            # 弹出开括号
            ops.pop() 
              
        # 当前标记是运算符。
        else: 
              
            # 当 'ops' 栈顶的操作符具有相同或更高的优先级时，
            # 将其应用于 'values' 堆栈中的前两个元素。
            while (len(ops) != 0 and
                precedence(ops[-1]) >= precedence(expression[i])): 
                  
                val2 = values.pop() 
                val1 = values.pop() 
                op = ops.pop() 
                  
                values.append(performOp(val1, val2, op)) 
                  
            # 将当前标记推入 'ops' 堆栈。
            ops.append(expression[i]) 
          
        i += 1
          
     # 在此处解析整个表达式后，将剩余的操作应用于剩余的值。
    while len(ops) != 0: 
          
        val2 = values.pop() 
        val1 = values.pop() 
        op = ops.pop() 
          
        values.append(performOp(val1, val2, op)) 
      
    # 'values' 堆栈顶部包含结果，返回它。
    return values[-1]