如何为循环创建动态范围?

时间:2019-07-11 10:33:48

标签: python loops dynamic

我旨在创建python循环的动态范围。我知道,将范围作为参数传递给范围生成器时,终止范围仅计算一次。但是,这个例子:

i = 1
for i in range(1,i,1):
    print i
    i = i +1

很明显,使用i=1会跳过循环。但是我想以某种方式根据i参数动态更改此范围。

这是我要使用动态范围的情况:

  1. 我计算链接的容量
  2. 我计算该链接上的带宽
  3. 我做一个循环,增加发送的流量,该流量应该等于容量,我称它为过载值。
  4. 增加范围是从1到过载值。

在每次迭代中每次都计算此重载值,并且它会更新范围。如果理论上说过载值是20,则范围将一直到20。

这是我的代码:

capacity = Router_1.get_tunnel_capacity()
tunnel_bandwidth = Router_1.check_bandwidth_overload()
    if tunnel_bandwidth <= capacity:
        for bandwidth in range(1, range_end, 1):
            os.system('iperf -c ' + server_address + ' -u -p 50001 -b ' + str(bandwidth) + 'M -i 1')
tunnel_bandwidth = Router_1.check_bandwidth_overload()
if tunnel_bandwidth <= capacity:
   # update the range_end according to tunnel_bandwidth

range_end是范围的动态值。反正有使其动态化吗?

3 个答案:

答案 0 :(得分:3)

使用while循环而不是for循环。 这是一个非常基本的示例:

z = 0
range = 10
while z < range:
    print(z)
    if z == 9:
        range = 20
    z += 1

答案 1 :(得分:2)

Rob给出的while循环答案可能是最好的解决方案,因为Python 3中的range()函数返回的是惰性序列对象而不是列表。

但是,在Python 2中,当您在for循环中调用range()时,它将创建一个列表。您可以保存该列表,然后对其进行变异。

类似这样的东西:

count = 10
r = range(count)
for i in r:
    newcount = 7
    del r[newcount:]

我不太确定如何增加尺寸,但是您明白了。

答案 2 :(得分:-1)

如果您想在range_end循环中更改for,则不能这样做,请尝试使用while循环。