Избегание вложенных циклов

Я пытаюсь выполнить некоторое тестирование параметров на другом коде с помощью python. Мне нужно проверить 6 независимых параметров, но мне нужны все возможные комбинации из них.

Каждый параметр имеет минимум, максимум и значение шага, которое необходимо передать ему. Первое легкое решение, появившееся в моей голове, было вложенной структурой цикла, которая выглядела ужасно, например:

for var1 in xrange(min1,max1,step1): for var2 in xrange(min2,max2,step2): ... ... ... for var6 in xrange(min6,max6,step6): ''' Do something and be icky in the process due to being in the middle of six nested for loops ''' 

Я решил, нет! Это не выдерживает. Поэтому я пытался разработать способ сделать это рекурсивно или, по крайней мере, не вложенным шесть раз. Я не могу придумать хорошую схему для этого. Самое большое препятствие для меня состоит в том, что каждая переменная имеет другое значение min, max и step.

Мои мысли пока не очень полезны. Я продолжаю пытаться сделать какую-то рекурсивную функцию, но я просто не могу понять ее, не вложив больше циклов в функцию. Я видел здесь много ссылок на itertools.product, но я не могу понять, как это сделать.

Изменить: то, что я делаю, это создать каталог с именем после комбинации параметров, записать файл с этими параметрами, запустить другой код с этим файлом и проанализировать вывод из этого кода. Я не делаю ничего в буквальном смысле ни одного из циклов, за исключением последнего. У многих параметров только 2 значения, у некоторых есть 10, у других 3, это просто меняется.

Вот как использовать product :

 x1 = xrange(min1,max1,step1) x2 = xrange(min2,max2,step2) x3 = xrange(min3,max3,step3) ... for v1, v2, v3, v4, v5, v6 in itertools.product(x1, x2, x3, x4, x5, x6): icky_thing(....) 

или немного более компактно:

 ranges = [ xrange(min1,max1,step1), xrange(min2,max2,step2), xrange(min3,max3,step3), ... ] for v1, v2, v3, v4, v5, v6 in itertools.product(*ranges): icky_thing(....) 

Вероятно, вы можете использовать itertools.product : http://docs.python.org/library/itertools.html#itertools.product .

Что-то вроде

 for var1, var2 in itertools.product(xrange(min1, max1, step1), xrange(min2, max2, step2)): # stuff 

, , , только со всеми шестью варами.