python - 如何在每次迭代中返回循环和条件中的值?
问题描述
我有以下功能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。我面临的问题是使用这个实现,函数只返回显而易见的。我找不到按照我的目标去做的方法。
解决方案
解决方案 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.
推荐阅读
- python - 从多个数据框 Pandas 构建 DataFrame 值
- java - 将日期转换为天
- java - Android - 从返回 null 但连接正常的 URL 解析 JSON 明文
- swift - 初始颜色设置不正确(Swift UI)
- angular - 拖动时禁用 cdkDragLockAxis
- r - 更改 plotrix'multhist 中的字体
- python - 有没有办法让多个 IndexedVertexLists 引用相同的顶点,同时具有不同的索引列表
- wordpress - wordpress 主页 url 重定向到本地主机
- google-apps-script - 如何判断 Google 表格是否已共享?
- gcc - 使用 Arm GNU 汇编程序的 Pop Push