Python lambda 自组合函数:如何return 一个重复n 次的函数?
Python lambda self composing function: How to return a function that is repeated n amount of times?
函数 self_compose(x,y)
将可调用语句 x
和整数 y
作为参数。
此函数然后 returns 另一个可调用函数,其结果是
有 x
次调用自己 y
次
即
sc = self_compose (lambda x : x*3, 3) # => ( ( (x*3) * 3) *3 )
sc(2) # = 54
问题是如何在不使用递归的情况下在 lambda 中创建 lambda?
可读的选择
确实不需要递归或嵌套 lambdas,您可以简单地通过创建 self_compose
来定义和 return,一个简单调用提供的 回调 n
次的函数。
def self_compose (cb, n):
def __worker (val):
for _ in range (n):
val = cb (val)
return val
return __worker
sc = self_compose (lambda x: x*3, 3)
if sc(2) == 54:
print ("SUCCESS")
SUCCESS
“我喜欢单行本”
当然,您可以使用以下内容一次性创建它:
from functools import partial, reduce
self_compose = lambda cb,n: partial (reduce, lambda v,cb: cb(v), [cb]*n)
if self_compose (lambda x: x+x, 3) ('B') == "BBBBBBBB":
print ("SUCCESS")
SUCCESS
函数 self_compose(x,y)
将可调用语句 x
和整数 y
作为参数。
此函数然后 returns 另一个可调用函数,其结果是
有 x
次调用自己 y
次
即
sc = self_compose (lambda x : x*3, 3) # => ( ( (x*3) * 3) *3 )
sc(2) # = 54
问题是如何在不使用递归的情况下在 lambda 中创建 lambda?
可读的选择
确实不需要递归或嵌套 lambdas,您可以简单地通过创建 self_compose
来定义和 return,一个简单调用提供的 回调 n
次的函数。
def self_compose (cb, n):
def __worker (val):
for _ in range (n):
val = cb (val)
return val
return __worker
sc = self_compose (lambda x: x*3, 3)
if sc(2) == 54:
print ("SUCCESS")
SUCCESS
“我喜欢单行本”
当然,您可以使用以下内容一次性创建它:
from functools import partial, reduce
self_compose = lambda cb,n: partial (reduce, lambda v,cb: cb(v), [cb]*n)
if self_compose (lambda x: x+x, 3) ('B') == "BBBBBBBB":
print ("SUCCESS")
SUCCESS