如果有人能帮我解决这个问题,我将不胜感激。我有这个功能
f(x) = r*x*(1-x)
我想为大约26个不同的r值重复定义,范围从3.8到3.85(我希望最终为这些函数绘制蛛网图并进行比较,我不想把r作为函数的参数)。所以我想把这26个函数存储在一个列表中,以后再访问它们。我有下面的代码,但是没有存储不同的函数定义,它只在列表中的所有26个位置存储第一个值r=3.8的函数。在
^{pr2}$因此,这些打印语句的输出是:
[3.8, 3.802, 3.804, 3.806, 3.808, 3.81, 3.812, 3.814, 3.816, 3.818, 3.82, 3.822, 3.824, 3.826, 3.828, 3.83, 3.832, 3.834, 3.836, 3.838, 3.84, 3.842, 3.844, 3.846, 3.848, 3.85]
[<function <lambda> at 0x0000000008739908>, <function <lambda> at 0x0000000008739978>, <function <lambda> at 0x00000000087399E8>, <function <lambda> at 0x0000000008739A58>, <function <lambda> at 0x0000000008739AC8>, <function <lambda> at 0x0000000008739B38>, <function <lambda> at 0x0000000008739BA8>, <function <lambda> at 0x0000000008739C18>, <function <lambda> at 0x0000000008739C88>, <function <lambda> at 0x0000000008739CF8>, <function <lambda> at 0x0000000008739D68>, <function <lambda> at 0x0000000008739DD8>, <function <lambda> at 0x0000000008739E48>, <function <lambda> at 0x0000000008739EB8>, <function <lambda> at 0x0000000008739F28>, <function <lambda> at 0x0000000008739F98>, <function <lambda> at 0x0000000008739828>, <function <lambda> at 0x000000000873D048>, <function <lambda> at 0x000000000873D0B8>, <function <lambda> at 0x000000000873D198>, <function <lambda> at 0x000000000873D208>, <function <lambda> at 0x000000000873D278>, <function <lambda> at 0x000000000873D2E8>, <function <lambda> at 0x000000000873D358>, <function <lambda> at 0x000000000873D128>, <function <lambda> at 0x00000000165452E8>]
-23.1
-23.1
我尝试了How can I define functions in a for loop?中的所有建议,但还是无法使其发挥作用。有什么想法吗?我真的很感激。在
为什么不呢?在
听起来不对。它应该做的是捕获变量
r
,并且它应该具有r
不时具有的值。在你要做的是定义你的lambda如下:
这样,lambda的本地}在定义时的值。在
r
被分配给外部{lambda函数内的
r
是外部上下文的r
,因此它在调用函数时具有值。要避免这种情况,请本地化r
:Lambdas不捕捉值,它们捕捉变量。这里的
r
在所有lambda中都是相同的,它的值是它在循环中获取的最后一个值。在您可以通过手动捕获值来修复它:
^{pr2}$展示行为的小例子:
相关问题 更多 >
编程相关推荐