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

2024-04-19 03:53:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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()

Tags: 函数name参数顺序def情况randomhi
3条回答

您的functions列表包含已经求值的函数的结果,而不是循环中没有参数的部分应用的函数(这样您就可以用i()调用它们)。你知道吗

您可以使用lambda生成没有如下参数的新函数:

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

for f in functions:
    f()

试着这样做:

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

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

当这行执行时:

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

相关问题 更多 >