4

我有下一个用于在 Python 中解析表达式的算法:

def parse(strinput):
  for operator in ["+-", "*/"]:
    depth = 0
    for p in range(len(strinput) - 1, -1, -1):
      if strinput[p] == ')': depth += 1
      elif strinput[p] == '(': depth -= 1
      elif depth==0 and strinput[p] in operator:
        # strinput is a compound expression
        return (strinput[p], parse(strinput[:p]), parse(strinput[p+1:]))
  strinput = strinput.strip()
  if strinput[0] == '(':
    # strinput is a parenthesized expression?
    return parse(strinput[1:-1])
  # strinput is an atom!
  return strinput

(可以在这里找到: http://news.ycombinator.com/item?id= 284842

我很难理解它,因为我发现 Python 文档对这种情况没有多大帮助。谁能告诉我 line:是什么for operator in ["+-", "*/"]:意思?我知道它的结构就像每个字符串变量一样,它是这两个元素的数组中的运算符,但为什么它写成这样 ["+-, */"]?Python是如何分离的?在第一次迭代中,运算符是“+-”?

任何帮助都意义重大。谢谢

4

1 回答 1

4

你是对的;for operator in ["+-", "*/"]:表示操作员将"+-"第一次通过,"*/"第二次通过循环。

请注意它稍后如何检查 if strinput[p] in operator。Python 将字符串视为字符列表,因此该表达式仅在第一次或第二次strinput[p]等于"+"或时才为真。"-""*""/"

(他们这样做的原因是为了操作顺序 -"+"并获得与and"-"相同但较低的优先级)"*""/"

于 2013-06-02T01:23:25.063 回答