这段代码中的反模式和错误有哪些?

时间:2016-03-10 03:34:29

标签: python python-2.7 python-2.x

你能帮我弄清楚代码中的反模式和问题吗?我似乎无法弄清楚这个代码的反模式和解决方案。我修正了一些错误,但我相信还有很多错误:

class Stringchecker():
    def __init__(self):
        pass
    def check_pass(people_text):
        result = []
        for k in people_text:
            if people_text[k] =="pass":
                result.append(k)
            else:
                return result


if __name__== "__main__":
    people_text = {'Mia': 'pass', 'Mike': 'fail', 'Jack': 'pass')
    sc = StringChecker()
    print sc.check_pass(people_text)

2 个答案:

答案 0 :(得分:2)

您的代码有几个语法问题和一些逻辑问题。此外,您没有正确使用class constructor,只是给它一个pass不是一个好习惯。另一件事是使用list comprehension作为check_pass方法。我对你的代码做了一些修改:

class StringChecker(object):

    def __init__(self, people_text):
        self.people_text = people_text

    def check_pass(self):
        return [k for k, v in self.people_text.items() if v == "pass"]

if __name__ == "__main__":
    sc = StringChecker({'Mia': 'pass', 'Mike': 'fail', 'Jack': 'pass'})
    print sc.check_pass()

输出:

['Mia', 'Jack']

注意:更新了列表理解,建议来自@ JLPeyret

答案 1 :(得分:1)

错误:

  • 未使用self作为check_pass
  • 的第一个参数
  • 在第一次失败后返回result(如果没有失败,将不会返回result;如果在成功之前发生失败,result将不会拥有所有数据)
  • return result应与for k in ...
  • 处于同一缩进级别

反模式:

  • class只有一个非__init__方法(只使用一个函数)
  • (假设else分支代替pass) - 无用的else分支