Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将随机函数作为参数传递?_Python_Function_Random_Arguments - Fatal编程技术网

Python 如何将随机函数作为参数传递?

Python 如何将随机函数作为参数传递?,python,function,random,arguments,Python,Function,Random,Arguments,Python非常灵活,我可以将函数用作列表元素或其他函数的参数。例如: x = [sin, cos] y = s[0](3.14) # It returns sin(3.14) 或 然而,我不清楚如何对随机函数进行同样的处理。例如,我想使用高斯分布:[random.normalvariate(3.0,2.0),random.normalvariate(1.0,4.0)]。在这个例子中,我将得到一个包含两个元素的固定列表。但我想得到的是一个包含随机元素的列表。用python做这件事的好方法是什么

Python非常灵活,我可以将函数用作列表元素或其他函数的参数。例如:

x = [sin, cos]
y = s[0](3.14) # It returns sin(3.14)

然而,我不清楚如何对随机函数进行同样的处理。例如,我想使用高斯分布:
[random.normalvariate(3.0,2.0),random.normalvariate(1.0,4.0)]
。在这个例子中,我将得到一个包含两个元素的固定列表。但我想得到的是一个包含随机元素的列表。用python做这件事的好方法是什么?

用函数试试:

[lambda: random.normalvariate(3.0, 2.0), lambda: random.normalvariate(1.0, 4.0)]
你可以看到括号的区别
sin
是一个函数,
sin(x)
是该函数的返回值。由于创建函数时不能没有表示随机.normalvariate(1.0,4.0)的括号,因此必须将其定义为lambda函数。

使用或
lambda

这些基本相同:

[lambda: normalvariate(3, 2), ...]
# or
[partial(normalvariate, 3, 2), ...]
它们都相当于:

def _function():
    return normalvariate(3, 2)

[_function, ...]
partial
更灵活,可以更好地控制
\u函数的创建,并避免lambda语法混乱


顺便说一句,Python社区对lambda存在一些争议,但Guido最终承认,您应该使用来自functools的部分:

import functools
arg_sets = [(3.0, 2.0), (1.0, 4.0)]
myfuncs = [functools.partial(random.normalvariate, *args) for args in arg_sets]
myfuncs[0]()

无法正确理解,是否正在寻找数量可变的参数?
import functools
arg_sets = [(3.0, 2.0), (1.0, 4.0)]
myfuncs = [functools.partial(random.normalvariate, *args) for args in arg_sets]
myfuncs[0]()