2024-05-23 14:18:16 发布
网友
我在一则招聘广告上看到了这一点:
lambda f: (lambda a: a(a))(lambda b: f(lambda *args: b(b)(*args)))
所以我所理解的是它是一个匿名(未命名)函数,它由另外两个嵌套的匿名函数组成。最里面的函数接受参数的变量列表(*args)。在
我不知道它应该做什么。这是实际可行的方法还是在没有看到实际参数列表的情况下无法判断?在
代码正在创建Y-combinator in Python。这只是一个练习,不是真实世界的代码;不要试图解密它。在
为了理解Y-combinator本身的功能,您可以参考这个SO问题:What is a y-combinator?和它的wikipedia页面:Fixed-point combinator。在
或者他们的公司是Y Combinator winner startup,他们只是在寻找有CS背景的Python程序员。在
不仅仅是*args,如果不知道a、b、f、和*args是什么,就很难判断它是什么。在
a
b
f
*args
当b作为参数传递给函数b时,兔子洞会变得特别深,结果是args被传递到的函数。在
我把兰姆达斯解开只是为了让它更容易阅读。下面是使用嵌套函数的代码:
def f1(f): def f2(a): return a(a) def f3(b): def f4(*args): return b(b)(*args) return f(f4) return f2(f3)
这基本上相当于:
现在让我们按照函数调用进行操作。首先你要用一些参数来调用f1。接下来会发生以下情况:
因此,f1可以简化为:
def f1(f): def f3(): def f4(*args): return f3()(*args) return f(f4) return f3()
现在我想出了一种方法来调用f1,它不会以无限递归结束:
called = False def g1(func): def g2(*args): print args return None global called if not called: called = True func(5) else: return g2 f1(g1) # prints "(5,)"
如您所见,它使用全局来停止递归。在
下面是另一个例子,它使用lambda(lambda是Poisson分布的参数,而不是lambda运算符)对Poisson分布进行试验:
import random def g3(func): def g4(a): def g5(b): print a return a+b return g5 if random.random() < 0.1: return g4(1) else: return g4(func(1)) f1(g3)
最后一点是确定性的,不依赖于全局,实际上有点有趣:
def g6(func): def g7(n): if n > 0: return n*func(n-1) else: return 1 return g7 print f1(g6)(5) # 120 print f1(g6)(6) # 720
我相信每个人都能猜出这个函数是什么,但有趣的是,你可以用这个奇怪的lambda表达式来做一些有用的事情。在
代码正在创建Y-combinator in Python。这只是一个练习,不是真实世界的代码;不要试图解密它。在
为了理解Y-combinator本身的功能,您可以参考这个SO问题:What is a y-combinator?和它的wikipedia页面:Fixed-point combinator。在
也许这个广告是寻找那些知道函数编程和/或高级计算机科学话题的人,比如Lambda calculus和Combinatory logic,这是函数编程背后的主要理论基础。在或者他们的公司是Y Combinator winner startup,他们只是在寻找有CS背景的Python程序员。在
不仅仅是*args,如果不知道
a
、b
、f
、和*args
是什么,就很难判断它是什么。在当b作为参数传递给函数b时,兔子洞会变得特别深,结果是args被传递到的函数。在
我把兰姆达斯解开只是为了让它更容易阅读。下面是使用嵌套函数的代码:
这基本上相当于:
^{pr2}$现在让我们按照函数调用进行操作。首先你要用一些参数来调用f1。接下来会发生以下情况:
因此,f1可以简化为:
现在我想出了一种方法来调用f1,它不会以无限递归结束:
如您所见,它使用全局来停止递归。在
下面是另一个例子,它使用lambda(lambda是Poisson分布的参数,而不是lambda运算符)对Poisson分布进行试验:
最后一点是确定性的,不依赖于全局,实际上有点有趣:
我相信每个人都能猜出这个函数是什么,但有趣的是,你可以用这个奇怪的lambda表达式来做一些有用的事情。在
相关问题 更多 >
编程相关推荐