발생하는 문제는 runner()
에 의해 반환 된 inner()
함수가 호출 될 때 random.randint(1,UPPER_BOUND)
이 한 번 평가된다는 것입니다. 필요한 것은 나중에 평가를 연기하는 것입니다.
당신은 이런 식으로 뭔가를 시도 할 수 : callable
는 원래의 함수 f
호출 할 때마다 호출
>>> def runner(f, callable):
... def inner():
... for i in xrange(1000):
... f(*callable())
... return inner
...
>>> runner(f, lambda: (random.randint(1, 1000),))()
603
385
321
etc.
하는 것으로. 또한 callable
은 튜플 또는 목록과 같은 시퀀스 유형을 반환해야합니다.
편집 : 당신이 f
에 다른 인수를 전달해야하는 경우 당신은 이런 식으로 뭔가 함께 할 수
>>> def runner(f, callable):
... def inner(*args, **kwds):
... for i in xrange(1000):
... pos = list(callable())
... pos.extend(args)
... f(*pos, **kwds)
... return inner
...
>>> def f(a, b, c, d = 3):
... print a, b, c, d
...
>>> runner(f, lambda: (random.randint(1,1000),))(3, 5, d = 7)
771 3 5 7
907 3 5 7
265 3 5 7