一个常规函数可以在其定义中包含对自身的调用,这是没有问题的。我不知道如何使用lambda函数来实现这一点,原因很简单,lambda函数没有可以引用的名称。有办法做到这一点吗?多么?
发布于 2012-01-03 00:34:16
不使用reduce,map,命名为lambdas或python内部:
(lambda a:lambda v:a(a,v))(lambda s,x:1 if x==0 else x*s(s,x-1))(10)
发布于 2009-01-26 23:16:30
你不能直接这么做,因为它没有名字。但是使用像Lemmy所指的Y-combinator这样的辅助函数,您可以通过将函数作为参数传递给自身来创建递归(尽管这听起来很奇怪):
# helper function
def recursive(f, *p, **kw):
return f(f, *p, **kw)
def fib(n):
# The rec parameter will be the lambda function itself
return recursive((lambda rec, n: rec(rec, n-1) + rec(rec, n-2) if n>1 else 1), n)
# using map since we already started to do black functional programming magic
print map(fib, range(10))
这将打印前十个斐波纳契数:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
,
发布于 2009-01-27 02:52:33
是。我有两种方法,其中一种已经介绍过了。这是我更喜欢的方式。
(lambda v: (lambda n: n * __import__('types').FunctionType(
__import__('inspect').stack()[0][0].f_code,
dict(__import__=__import__, dict=dict)
)(n - 1) if n > 1 else 1)(v))(5)
https://stackoverflow.com/questions/481692
复制相似问题