在列表中搜索

时间:2017-08-22 19:02:51

标签: python

class CommandManager:
        def __init__(self):
            self.commands = []

        def add_command(self, command: Command):
            if command is None:
                return None

            for target in self.commands:
                if target.name is command.name:
                    return None

            print(command.name, command.description, command.usage, command.min_arguments)  # debug

            self.commands.append(command)
            return command

        def get_command(self, name):
            if name is None:
                return None    
            for target in self.commands:
                if name is target.name:
                    return target    
            return None

这段代码有什么问题?添加到数组并在add_command方法中查找它可以正常工作,但在get_command中找不到它。没有价值None

2 个答案:

答案 0 :(得分:2)

is测试身份,而不是平等。这意味着Python只是简单地比较一个对象所在的内存地址。

你应该使用==运算符来测试字符串的相等性,如:

if name == target.name:

答案 1 :(得分:0)

is运算符测试两个变量是否指向同一个对象。请改用==

if name == target.name: