调用带有随机参数的函数列表

时间:2018-10-28 21:32:48

标签: python function loops random

如何使用随机参数调用一组函数。

import random

def sum_3 (a):
    return (sum(a) + 3)
def sum_2 (b):
    return (sum(b) + 2)

# Call the functions 
functions = [sum_3, sum_2]
# Using random arguments
random.sample(range(1, 100000), 5)

4 个答案:

答案 0 :(得分:0)

假设functions是函数列表:

import random
# Call your function like this:
random.choice(functions)(a)

如果您更喜欢使用np.random.choice,请使用numpy(之所以这样做,是因为它更多是默认的数学库)

答案 1 :(得分:0)

您可以遍历函数并通过示例进行调用。

>>> the_sample = random.sample(range(1, 100000), 5)
>>> the_sample
>>> [6163, 38513, 35085, 4876, 27506]
>>>
>>> for func in functions:
...:    print(func(the_sample))
...:    
112146
112145

建立结果列表:

>>> [func(the_sample) for func in functions]
>>> [112146, 112145]

答案 2 :(得分:0)

取决于您要调用它的次数。一种方法如下:

import random

def sum_3 (a):
    print('calling sum3 with', a)
    return (sum(a) + 3)

def sum_2 (b):
    print('calling sum2 with', b)
    return (sum(b) + 2)

functions = [sum_3, sum_2]
for i in range(3): # call each function 3 times
    for func in functions:
        print(func(random.sample(range(1, 100000), random.randint(2, 6))))

输出

calling sum3 with [76385, 37776, 19464]
133628
calling sum2 with [21520, 97936, 44610]
164068
calling sum3 with [1184, 4786]
5973
calling sum2 with [2680, 36487, 24265, 39569, 18331]
121334
calling sum3 with [87777, 81241, 95238, 58267, 3434, 85015]
410975
calling sum2 with [5020, 68999, 50868, 17544]
142433

答案 3 :(得分:0)

我将定义一个通用函数,该函数允许我选择并预定义要使用的函数,然后将选定的函数与参数一起应用。您可以考虑采用以下两种方法:

  1. 将所需的功能编译为一个对象。

  2. 将已编译对象中的函数应用于参数。

因此,与其像在问题中那样将函数放在列表中,不如将它们编译在具有另一个函数的对象中。它适用于多个功能以及单个功能,因此非常通用。

import random

def sum_3 (a):
    return (sum(a) + 3)
def sum_2 (b):
    return (sum(b) + 2)

parameters = random.sample(range(1, 100000),5)

# generic function to apply functions on parameters
def compile(*fs): return lambda x: map(lambda f: f(x), fs)

# choose the functions you want to apply
dosum3and2 = compile(sum_3,sum_2)
dosum2only = compile(sum_2)

# apply the defined functions to parameters
print(list(dosum3and2(parameters)))
print(list(dosum2only(parameters)))
# output =>
# [294334, 294333]
# [294333]

当您有许多功能sum_1sum_2sum_3,...,sum_n时,请先编译它们,然后将其应用于诸如以下的参数

# compile the chosen functions
# which looks very similar as what you did with list (functions = [sum_3, sum_2]).
functions = compile(sum_1,sum_2,sum_3,...,sum_n)
# apply to parameters
functions(parameters)