当前位置: 首页 > 面试题库 >

用python编写函数

晁英彦
2023-03-14
问题内容

我有一个函数数组,我试图产生一个由数组中元素组成的函数。我的方法是:

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

  • 问题内容: 我是节点的新手,并尝试在节点中使用异步和事件行为优势。我以前从节点上了解到,用事件对象处理的所有内容都会异步执行。 然后我尝试了这个,请考虑以下代码: 这是异步执行吗?我认为不!为什么,因为我读了很多这句话: 一个事件被触发了,所以去做点什么,然后当你完成它之后,回来告诉我,但是与此同时,我会做点其他的事情。 就像快餐店的场景。但是上面的代码,当事件工作被触发时,将发生以下顺序: 进入