程序在for循环中跳过if语句

时间:2016-11-22 20:18:00

标签: python python-3.x

我正在尝试使用函数更新客户端详细信息。但它不起作用。我调试程序,我意识到它永远不会进入if。我不知道为什么?

这是功能:

def UpdateClient(self,id,cnp,name,adress):
    for i in range (len(self.clients.get_all())):
        if self.clients.get_all()[i].get_id==id:
            self.clients.get_all()[i].set_name(name)
            self.clients.get_all()[i].set_cnp(cnp)
            self.clients.get_all()[i].set_adress(adress)

当我尝试更新客户端时,我会提供idnamecnpadress,但是当我打印列表时,没有任何更改。我无法使用调试器进入if,因为它说它们永远不会相等。为什么呢?

2 个答案:

答案 0 :(得分:5)

请注意,get_idget_id()不同。前者引用该方法,而后者实际上称之为。

此外,请考虑通过编写更多惯用的Python来简化代码。例如:

for client in self.clients.get_all():
        if client.get_id() == id:
            client.set_name(name)
...

答案 1 :(得分:3)

这里的问题是你将check作为get_id == id,但这是一个功能。您的if应该是:

if self.clients.get_all()[i].get_id()==id:
#                                   ^ making it a function call

此外,更好的方法是将self.clients.get_all()存储在单独的变量中。因此,您的代码应如下所示:

def UpdateClient(self,id,cnp,name,adress):
    clients = self.clients.get_all()
    for i in range (len(clients)):
        if clients[i].get_id()==id:
            clients[i].set_name(name)
            clients[i].set_cnp(cnp)
            clients[i].set_adress(adress)