Python 如何从具有不同参数的方法列表中随机选择方法?

Python 如何从具有不同参数的方法列表中随机选择方法?,python,random,Python,Random,我有b类的对象a,方法是foo(),boo(),noo(arg)。现在我想随机选择其中一个,而不扩展类b。问题是,如果我使用这里假设的技术,那么我的方法必须有相同的参数。 所以我不能像这样使用smth: my_list = [a.foo, a.boo, a.noo] random.choice(my_list)() 对于noo方法,我需要使用arg调用它:a.noo(arg)。那么如何以蟒蛇的方式来做呢?这就是我要做的。虽然如果您希望函数包含多个参数,最好将其作为列表发送并在函数处解包

我有
b类
的对象
a
,方法是
foo(),boo(),noo(arg)
。现在我想随机选择其中一个,而不扩展
类b
。问题是,如果我使用这里假设的技术,那么我的方法必须有相同的参数。 所以我不能像这样使用smth:

my_list = [a.foo, a.boo, a.noo]    
random.choice(my_list)()

对于
noo
方法,我需要使用
arg
调用它:
a.noo(arg)
。那么如何以蟒蛇的方式来做呢?

这就是我要做的。虽然如果您希望函数包含多个参数,最好将其作为列表发送并在函数处解包

import random

def foo():
    print('foo')

def boo():
    print('boo')

def noo(arg):
    print('noo:', arg)

my_list = [(foo,), (boo,), (noo, 'hello world')]
for i in range(10):
    choice = random.choice(my_list)
    if len(choice) == 1:
        choice[0]()
    else:
        choice[0](choice[1])

评论中提出了类似的建议:

import random

my_list = [a.foo, a.boo, a.noo]  
rand = random.choice(my_list)
if rand.__name__ == 'noo':
    rand(arg)
else:
    rand()
这样,您就可以灵活地调用任何带有动态参数的函数,具体取决于您的方法

记住保持参数和函数的顺序相同

编辑:您也可以按照评论中的建议操作(我认为这更容易,谢谢!):


为什么你不使用
如果
做a.noo这个案例呢?但这是一个pythonic的方式吗?如果这个解决方案对你有效,它不需要是“pythonic”,我的意思是,它可能会更短。我不能在列表中指定arg for noo函数吗?您需要调用一个随机函数,但每次调用都应该使用一组特定的参数,是吗?
import random

funcs = [foo, boo, noo]
args = [[1,2,3], [4,5], [2]]
choice = random.randint(len(funcs))

funcs[choice](*args[choice])
import random

calls = [(foo, [1,2,3]), (boo, [4,5]), (noo, [2])]
choice = random.choice(calls)

choice[0](*choice[1])