我知道如何运行没有参数的函数。在这种情况下,我想运行具有随机顺序参数的函数?
它显示结果但不是随机的,并且有一些错误:请帮我纠正我的代码。谢谢:))
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()
答案 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