B = [10, 15, 20, 5]
F = [lambda x: x, lambda x: x * x, lambda x: x * 2 - 5]

def dostuff(i0, i1, i2, i3):
    print((i0, i1, i2, i3))
expected = []
for i0 in range(0, B[0]):
    for i1 in range(F[0](i0), B[1]):
        for i2 in range(F[1](i1), B[2]):
            for i3 in range(F[2](i2), B[3]):
                expected.append([i0, i1, i2, i3])
Использование itertools для произвольного количества вложенных циклов разных диапазонов с зависимостями?