首页 > 解决方案 > 如何在每次迭代中返回循环和条件中的值?

问题描述

我有以下功能check_overload(...),我可以在其中检查我的链接是否超载或不使用下面显示的参数。

def check_overload(SR_path, Router_1, Router_2, Router_3, Router_4, step, capacity):
    iterations_array = number_iteration_tunnels(SR_path)
    load_tunnels = bandwidth_tunnel(SR_path, Router_1, Router_2, Router_3, Router_4)
    global overload_point
    overload_point = np.zeros(len(iterations_array))
    for i in range(len(iterations_array)):
        if load_tunnels[i] >= capacity - (iterations_array[i][1] * step):
            print "Link is overloaded"
            overload_point = load_tunnels[i] - step
            return overload_point
        else:
            print "Link is not overloaded"
            return 0

首先,我计算SR_path函数中每个元素的迭代次数number_iteration_tunnels(..)。然后,使用此函数创建的数组iterations_array,我执行一个循环来导航该数组。

我的目标是在每次迭代中返回overload_point是否满足条件,否则,我返回 0。我面临的问题是使用这个实现,函数只返回显而易见的。我找不到按照我的目标去做的方法。

标签: pythonarrays

解决方案


解决方案 1

  • 您可以使用yield.
  • 以下示例尝试重现您的解决方案。
def check_overload(SR_path, Router_1, Router_2, Router_3, Router_4, step, capacity):
    iterations_array = number_iteration_tunnels(SR_path)
    load_tunnels = bandwidth_tunnel(SR_path, Router_1, Router_2, Router_3, Router_4)
    global overload_point
    overload_point = np.zeros(len(iterations_array))
    for i in range(len(iterations_array)):
        if load_tunnels[i] >= capacity - (iterations_array[i][1] * step):
            print "Link is overloaded"
            overload_point = load_tunnels[i] - step
            yield overload_point
        else:
            print "Link is not overloaded"
            yield 0

for result in check_overload(*args):
    print(result) # or do whatever you want.

解决方案 2

  • 使用列表存储结果。
def check_overload(SR_path, Router_1, Router_2, Router_3, Router_4, step, capacity):
    res = []
    iterations_array = number_iteration_tunnels(SR_path)
    load_tunnels = bandwidth_tunnel(SR_path, Router_1, Router_2, Router_3, Router_4)
    global overload_point
    overload_point = np.zeros(len(iterations_array))
    for i in range(len(iterations_array)):
        if load_tunnels[i] >= capacity - (iterations_array[i][1] * step):
            print "Link is overloaded"
            overload_point = load_tunnels[i] - step
            res.append(overload_point)
        else:
            print "Link is not overloaded"
            res.append(0)
    return res

for result in check_overload(*args):
    print(result) # or do whatever you want.

推荐阅读