python - 比循环和调用循环调用另一个函数的函数更好的方法

标签 python python-3.x algorithm oop design-patterns

我有一个消息(字符串),它由事务组成,元素<组成/strong>.

我有比循环和调用函数更好的方法来解析这样的消息,循环并调用另一个函数 循环并调用另一个函数因为我发现以下内容很愚蠢:

class Parser:
  def parse_msg(self, msg):
    trans = re.findall(trans_pattern, msg)
    for t in trans:
      self.parse_trans(t)

  def parse_trans(self, trans):
    groups = re.findall(groups_pattern, trans)
    for g in groups:
      self.parse_group(g)

  def parse_group(self, group):
    elements = re.findall(element_pattern, group)
    for e in elements:
      self.parse_element(e)

  def parse_element(self, e):
    pass

有没有更好的方法/设计模式可以解决这个问题?

最佳答案

嗯,我想有几种可能性。您可以具有如下结构:

import re

GRAMMAR = (
    trans_pattern, (
        groups_pattern, (
            element_pattern, None
        )
    )
)

def parse_message(msg):
    parse_message_rec(msg, GRAMMAR)

def parse_message_rec(msg, grammar):
    if grammar is None:
        # Leaf element
        return
    pattern, next_grammar = grammar
    children = re.findall(pattern, msg)
    for child in children:
        parse_message_rec(child, next_grammar)

关于python - 比循环和调用循环调用另一个函数的函数更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51612985/

相关文章:

python - 为什么模拟在调用时忽略传递给模拟方法的实例/对象?

python - 异常值: (Cannot resolve keyword) In Django

c - 如何让 "blend"两个值不溢出?

c - 合并排序逻辑错误

python - networkx.exception.NodeNotFound 即使节点存在

python - 在 python flask 中使用游标对 postgres 查询进行分页

python-3.x - 如何在 Deeppavlov (NER) Python 3 中训练模型

python - PyQt 启用/禁用 QComboBox 中的元素

c++ - 计算组合数量

python - getPass() 在 Eclipse 中回显密码