Как создать динамический диапазон для цикла? - PullRequest
0 голосов
/ 11 июля 2019

Я стремлюсь создать динамический диапазон цикла питона.Я знаю, однажды конечный диапазон вычисляется только один раз, когда он передается в качестве аргумента генератору диапазона.Однако, это пример:

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 ]

3 голосов
/ 11 июля 2019

Используйте цикл while вместо цикла for.Это действительно простой пример:

z = 0
range = 10
while z < range:
    print(z)
    if z == 9:
        range = 20
    z += 1
2 голосов
/ 11 июля 2019

Ответ цикла, данный Робом, вероятно, будет лучшим решением, так как функция range () в Python 3 возвращает ленивый объект последовательности, а не список.

Однако в Python 2когда вы вызываете range () в цикле for, он создает список.Вы можете сохранить этот список, а затем изменить его.

Что-то вроде этого:

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

Я не слишком уверен, как это будет работать для увеличения размера, но вы поняли идею.

0 голосов
/ 11 июля 2019

Если вы хотите изменить range_end в цикле for, вы не можете этого сделать, попробуйте использовать цикл while.

...