【发布时间】:2015-04-29 17:07:57
【问题描述】:
我基本上在下面的python中创建了这个递归函数,它计算从另一个节点到另一个节点的功率,并根据节点的覆盖半径找到。
我想要做的是从这个函数中获取输出并再次调用它的递归函数,而不会丢失我得到的输出,我不知道该怎么做。
这是下面的函数:
def find_new_int(node_in_ex, old_inters):
global Power_Sensitivity
global copy_of_int_list
intersection_list_method = []
for wall_coordinates in lines:
if intersection_rand_point(wall_coordinates[0], wall_coordinates[1], node_in_ex-1, old_inters) is not False:
intersection_list_method.append(intersection_rand_point(wall_coordinates[0], wall_coordinates[1], node_in_ex-1, old_inters))
intersection_list_method = sorted(list(itertools.chain(*intersection_list_method)), key=cal_distance_av)
for points in intersection_list_method:
if cal_pow_rec_plndwall(node_in_ex, points) > Power_Sensitivity:
return intersection_list_method
for points in intersection_list_method:
return find_new_int(node_in_ex, points)
我想循环第一次运行函数时输出的intersection_list_method >>IF
find_new_int(node_in_ex, points)
再次,我正在循环的intersection_list_method 被删除并创建了一个新的,但我想在该列表中的每个点上循环,并查看该函数是否会为intersection_list_method 中的每个点返回该列表,直到它结束
有什么帮助吗?
【问题讨论】:
-
第一个明显的问题是
for points in intersection_list_method: return find_new_int(node_in_ex, points)会在你获得第一个值后立即转到return,这意味着你永远不会执行循环的其余部分。 (这是你唯一的递归调用,所以大概是你遇到问题的那个。)这两行 supposed 是做什么的? -
@abarnert 所以我必须找到我从方法中得到的半径节点之间的交点:intersection_rand_point(wall_coordinates[0], wall_coordinates[1], node_in_ex-1, old_inters) 然后我返回具有计算半径的墙与墙周围墙的交点列表。我的问题是,例如,如果从另一个节点到达的交叉点功率的第一个点是
-
嗯,是的,它停在第一个节点,因为你
return为每个节点一次,一旦你return为第一个节点,这就是函数的结尾。如果您需要为每个节点做某事并以某种方式汇总所有这些调用的结果,您需要解释那是什么。例如,如果您只想返回它们的列表,您可以在循环中将append放到该列表中,然后在循环完成后将return放到列表中。 -
不,我的问题有所不同。我希望它在我发现的第一个节点停止,该节点有一个交叉点列表,该列表中有一个交叉点,其功率大于原始节点。这就是我在这里所做的:`对于intersection_list_method中的点:如果cal_pow_rec_plndwall(node_in_ex,points)> Power_Sensitivity:返回intersection_list_method`但是如果它没有在那个列表中找到一个功率>功率灵敏度的点,我希望它再次调用相同的再次在该列表中的每个点上运行,直到它返回一些东西。
-
好的,那么你只需要在循环内有一个
if来检查返回值,并且只有当它是“某物”时才返回它。让我试着在答案中解释一下。