gpt4 book ai didi

python - 如何理解 Peter Norvig 的这段 Python 函数式代码?

转载 作者:太空狗 更新时间:2023-10-29 21:03:41 26 4
gpt4 key购买 nike

在阅读 Peter Norvig 的 Python IAQ 时,我遇到了这个代码片段:

def _if(test):
return lambda alternative: \
lambda result: \
[delay(result), delay(alternative)][not not test]()
def delay(f):
if callable(f): return f
else: return lambda: f
fact = lambda n: _if (n <= 1) (1) (lambda: n * fact(n-1))
fact(100)

我在网上搜索了一下,这个代码出现在几个论坛上,但是评论它的人似乎都明白它是如何工作的。

我对函数式编程概念还很陌生。我知道如果测试评估为 True,将选择 delay(alternative)。但实际上,如果 test 为真,则返回结果。这对我来说似乎违反直觉。

最佳答案

让我们看看:

  • _if(True) 被调用,并立即返回带有 alternative 参数的 lambda
  • 调用返回的 lambda 并将 alternative 设置为 1 并返回 result lambda
  • result lambda 被调用,result 设置为 lambda: n * fact(n-1)
  • not not True 计算结果为 1(此示例来自 python 2.4 时代!),它索引第二个列表项,即 delay(alternative)
  • alternative 之前设置为 1
  • delay(1) 被调用,返回 lambda: 1
  • lambda: 1 被调用,它返回 1

TL/DR:1备选方案

命名函数版本:

def _if(test):
def then_closure(expr_if_true):
def else_closure(expr_if_false):
if test:
delayed = delay(expr_if_true)
else:
delayed = delay(expr_if_false)
return delayed()
return else_closure
return then_closure

关于python - 如何理解 Peter Norvig 的这段 Python 函数式代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14371010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com