Python 3:如何以随机顺序运行带参数的函数?

时间:2016-10-10 13:04:03

标签: python function random

我知道如何运行没有参数的函数。在这种情况下,我想运行具有随机顺序参数的函数?

它显示结果但不是随机的,并且有一些错误:请帮我纠正我的代码。谢谢:))

import random
def hi(name):
    print('a ' + name)

def howold(old, name):
    print( name + 'is ' + old + "years old")

def howmuch(money):
    print(money + ' dollars')


functions = [hi('John'),howold('20', 'John'),howmuch('50')]
random.shuffle(functions)
for i in functions:
    i()

4 个答案:

答案 0 :(得分:3)

尝试类似的东西:

functions = [(hi, ['John']), (howold, ['20', 'John']), (howmuch, ['50'])]

random.shuffle(functions)
for func, args in functions:
    func(*args)

答案 1 :(得分:2)

您的onBindViewHolder()列表包含已评估函数的结果,而不是循环中没有参数的部分应用函数(以便您可以使用functions调用它们)。

你可以使用lambdas来生成没有这样的参数的新函数:

i()

答案 2 :(得分:1)

执行此行时:

functions = [hi('John'),howold('20', 'John'),howmuch('50')]

Python会按顺序调用您的3个函数hi()howold()然后调用howmuch(),然后将结果存储在名为functions的列表中。因此,所有print()都将在此时运行。这就是为什么,正如你所说,"它显示了结果但不是随机的"。由于您的所有功能都不会返回任何内容,因此functions将等于[None, None, None]

然后是以下代码:

random.shuffle(functions)
for i in functions:
    i()

将尝试执行None()。这会产生错误,如你所说"有一些错误":此错误是TypeError: 'NoneType' object is not callable

如何修复:例如使用functools.partial()

from functools import partial
functions = [partial(hi, 'John'), partial(howold, '20', 'John'), partial(howmuch, '50')]
random.shuffle(functions)
for i in functions:
    i()

官方文档:https://docs.python.org/2/library/functools.html#functools.partial

答案 3 :(得分:-1)

在你的循环中,我是一个函数,而不是一个字符串,因此将它与一个字符串进行比较将不起作用,你最终在其他地方。而是使用if i.__name__ == 'hi