Skip to main content
 首页 » 编程设计

python之将列表理解表达式拆分为多行以更好地了解发生了什么

2025年05月04日20artech

我试图更好地理解一些代码,但有一行代码做了一堆我没有完全理解的事情。我想知道是否有办法将它分成多行,以便我可以更好地了解每个步骤中发生的事情。

这段代码是一个函数的一部分,是一段很长的代码(很多行),所以当这只是一行时,很难将整个代码粘贴到这里。但是,如有必要,我可以这样做或以某种方式附加代码。我特别提到的那行是一个函数,当给定一个部分赋值时,它返回完整的赋值。如下:

return min([(sum([int(self.get_weight(assign, var, action)>0) for action in self.domains[var]]), var) for var in self.my_function if var not in assign])[1]         

这些调用了一堆以前编码的权重等。我只是问你如何将这个表达式分成多行。我的一些想法是:

for var in self.my_function: 
    if var not in assign: 
        for action in self.domains... 

关于如何做到这一点有什么想法吗?我看到当我尝试这样的事情时抛出了一个错误,“unhashable type: list”,所以我知道它不是完全相同的表达式。谢谢!

请您参考如下方法:

首先将原始代码拆分成多行:

min([ 
    ( 
        sum([ 
            int(self.get_weight(assign, var, action)>0) for action in self.domains[var] 
        ]), var 
    ) for var in self.my_function if var not in assign 
])[1]   

可以重写为:

list_to_take_min_of = [] 
 
for var in self.my_function: 
    if var not in assign: 
        weights = [] 
        for action in self.domains[var]: 
            weights.append(int(self.get_weight(assign, var, action)>0)) 
        list_to_take_min_of.append((sum(weights), var)) 
 
min(list_to_take_min_of)[1]