我试图更好地理解一些代码,并且有一行正在做一些我不完全理解的事情。我想知道是否有办法将其分成多行,这样我就可以更好地了解每一步中发生的事情。
这段代码是一个函数和一长串代码(很多行)的一部分,因此当这只是一行时,将整个代码粘贴到这里有点困难。但是,如果需要,我可以这样做或以某种方式附加代码。我正在谈论的这一行是一个函数,当给定部分赋值时,它返回完整的赋值。它如下:
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...
有关如何做到这一点的任何想法?当我尝试这样的事情时,我看到了一个错误,"不可用的类型:list",所以我知道它的表达方式并不完全相同。谢谢!
答案 0 :(得分:3)
首先将原始代码分成多行:
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]
答案 1 :(得分:1)
您也可以将原始代码拆分为多行以方便阅读:
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]
答案 2 :(得分:1)
当分解一个衬里时,我发现一步一步地按照以下模板进行每个嵌套列表理解是有帮助的:
out = [expression(value) for value in iterable if condition]
#becomes
out = []
for value in iterable:
if condition
out.append(
expression(value)
)
在你的情况下,你有一个嵌套列表理解,所以expression(...)
将是这个样板的另一个副本......