有没有可能创建一个函数,它将lambda函数作为参数(每个lambda函数使用参数x
),然后返回一个具有单个参数x
的新函数,并返回所有lambda函数的乘积?
以下是我的非工作示例:
def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
return def func_you_2(x):
return lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
所以本质上,你有一个函数func_you
,它需要4个lambda函数,每个函数使用参数x
。例如,lambdafunc1
的参数可以类似于lambda x: x 10
。
func\u-you
然后返回一个名为func\u-you 2
的新函数,该函数的输出是所有lambda函数的乘积,并且有一个参数x
,该参数传递到func\u-you
的每个lambda函数的x
参数。
假设我试图做的事情是可能的,我如何传达正确的语法来做这件事?
还有,这种东西有没有一个特定的名字,而不是“返回函数的函数”?严格来说这不是嵌套函数对吧
从技术上讲,这绝对是一个嵌套函数:
def func_you(lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
def func_you_2(x):
return lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
return func_you_2
但是您也可以使用lambda
:
def func_you(lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
您可以返回一个lambda函数,该函数满足您的要求。范例-
def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
演示-
>>> def func_you( lambdafunc1, lambdafunc2, lambdafunc3, lambdafunc4):
... return lambda x: lambdafunc1(x) * lambdafunc2(x) * lambdafunc3(x) * lambdafunc4(x)
...
>>> f = func_you(sum,min,max,sum)
>>> f([1,2])
18
到目前为止,我的答案并不比任何其他答案好,但我想稍微调整一下,从这个问题中挤出更多的函数式编程,只是为了好玩。
from functools import reduce
from operator import mul
def functioners(*funcs):
def inner(x):
return reduce(mul, [f(x) for f in funcs], 1)
return inner
In [2]: res = functioners(lambda x: x+1, lambda x: x *2, lambda x: x+3)
In [3]: res(5)
Out[3]: 480
In [4]: res = functioners(lambda x: x+1, lambda x: x +1, lambda x: x+1)
In [5]: res(1)
Out[5]: 8
编辑
为了实现一种10分钟的尝试,我甚至变得有点疯狂。这不是我会让我的同事去做的事,但我现在已经很晚了,所以可能只是为了好玩。。。
应该可以定义一个函数,该函数可以不断返回自身的部分应用版本,但我想您需要某种方法来告诉它停止?
这是我的尝试:
from functools import partial, reduce
from operator import mul
def functionals(*funcs, finished=None):
def inner(x):
return reduce(mul, [f(x) for f in funcs], 1)
if finished is not None:
# stop condition
return inner
else:
return partial(functionals, *funcs)
你可以这样使用它(如果你这么想的话…)
In [37]: f1 = functionals(lambda x: x+1)
In [38]: f2 = f1(lambda x: x + 1)
In [39]: f3 = f2(lambda x: x + 1, lambda x: x + 1, lambda x: x + 1)
In [40]: f3(finished="definitely!")(1)
Out[40]: 32
(我现在就去拿帽子和外套……)
在rust中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。我们先来看看main函数: fn main() { //statements } 之前有说过,函数的返回值类型是在参数列表后,加上箭头和类型来指定的。不过,一般我们看到的main函数的定义并没有这么做。这是因为main函数的返回值是(),在rust中,当一个函数返回()时,可以省略。main函数的完整形式如下:
到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束。但实际上,在某些场景中,我们还需函数将处理的结果反馈回来,就好像主管向下级员工下达命令,让其去打印文件,员工打印好文件后并没有完成任务,还需要将文件交给主管。 Python中,用 def 语句创建函数时,可以用 return 语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回
问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:
问题内容: 我有一些Python代码基本上看起来像这样: 奇怪的是: print(my_list) 打印出正确的内容。但是,第二个打印该函数返回值的打印语句始终打印“无”。即使我用 return(“ abc”) 替换普通的return语句,它仍然是None。 由于该变量的内容似乎在return语句前一行是正确的,所以我不知道从哪里开始调试。是否有可能导致此问题的常见问题? 问题答案: 这是发生了什