使用不同的参数多次运行python函数

k_w*_*ski 4 python

嗨我需要一个函数,它将获取一个函数并返回一个将运行该参数函数的函数,例如.1000次,每次评估它的论点.我有这样的事情:

def runner(f):
    def inner(*args):
        for i in xrange(1000):
            f(*args)
    return inner
Run Code Online (Sandbox Code Playgroud)

但似乎这样的调用:runner(f)(random.randint(1,UPPER_BOUND))使用相同的参数运行f 1000次.怎么做正确?

srg*_*erg 7

您遇到的问题是random.randint(1,UPPER_BOUND)inner()调用返回的函数时被评估一次runner().您需要的是将评估推迟到以后.

你可以尝试这样的事情:

>>> 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.
Run Code Online (Sandbox Code Playgroud)

请注意,callable每次调用原始函数时f都会调用它.另请注意,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
Run Code Online (Sandbox Code Playgroud)