我有一个函数数组,我试图产生一个由数组中元素组成的函数。我的方法是:
def compose(list):
if len(list) == 1:
return lambda x:list[0](x)
list.reverse()
final=lambda x:x
for f in list:
final=lambda x:f(final(x))
return final
此方法似乎无效,将不胜感激。
(我要反转列表,因为这是我希望函数成为的组合顺序)
它不起作用,因为您在循环中创建的所有匿名函数都引用相同的循环变量,因此共享其最终值。
作为快速解决方案,您可以将分配替换为:
final = lambda x, f=f, final=final: f(final(x))
或者,您可以从函数返回lambda:
def wrap(accum, f):
return lambda x: f(accum(x))
...
final = wrap(final, f)
要了解发生了什么,请尝试以下实验:
>>> l = [lambda: n for n in xrange(10)]
>>> [f() for f in l]
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
这个结果使许多人感到惊讶,他们期望结果会如此[0, 1, 2, ...]
。但是,所有的lambda都指向相同的n
变量,并且都指向其最终值9。在您的情况下,final
应该嵌套的所有版本最终都指向相同的f
,甚至更糟的是,指向相同的变量。final
。
我有一个函数数组,我试图生成一个函数,它由数组中的元素组成。我的做法是: 此方法似乎不起作用,请给予帮助。 (我正在反转列表,因为这是我希望函数的组合顺序)
我想写一个包含我们想在项目中使用的函数的Python文件。我们正在为Instagram开发一个硒网刮擦机器人。现在我们在脚本中编写所有的函数,但是我们想制作一个“函数”文件,我们将导入并用于我们的脚本。但问题是,当我想使用像
本文向大家介绍编写strcpy 函数相关面试题,主要包含被问及编写strcpy 函数时的应答技巧和注意事项,需要的朋友参考一下 已知strcpy 函数的原型是 char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串, strSrc 是源字符串。 (1)不调用C++/C 的字符串库函数,请编写函数 strcpy 。 (2)str
我目前正试图用源SDK用C编写一个LookAt函数。我做了一些研究,发现了很多链接,但其中很多都是关于统一或Glm的,并且使用了四元数和旋转矩阵,但我不需要这些。 所以,我的问题是: 我在门户2。我有一个位置坐标为x,y,z的目标,我有我的球员的位置和他的旋转角度(偏航,俯仰,滚动)。当我使用目标坐标作为参数的函数时,我希望我的播放器看到目标<我发现:点看点,但效果不太好,最后的角度从来都不好。
前面我们已经生成好了一份扩展框架,但它是没有什么实际作用的。一个扩展的作用可大了去了,既可以操作PHP中的变量、常量,还可以定义函数、类、方法、资源等。先让我们从函数说起吧! ZEND_FUNCTION()宏函数 ZEND_FUNCTION()宏函数也可以写成PHP_FUNCTION(),但ZEND_FUNCTION()更前卫、标准一些,但两者是完全相同的。 #define PHP_FUNCTIO
问题内容: 我是节点的新手,并尝试在节点中使用异步和事件行为优势。我以前从节点上了解到,用事件对象处理的所有内容都会异步执行。 然后我尝试了这个,请考虑以下代码: 这是异步执行吗?我认为不!为什么,因为我读了很多这句话: 一个事件被触发了,所以去做点什么,然后当你完成它之后,回来告诉我,但是与此同时,我会做点其他的事情。 就像快餐店的场景。但是上面的代码,当事件工作被触发时,将发生以下顺序: 进入