封闭简单用例

时间:2019-03-30 00:55:38

标签: python closures

我不理解以下练习面试问题:

  

cons(a, b)构造一对,car(pair)cdr(pair)返回   该对的第一个和最后一个元素。例如,car(cons(3, 4))   返回3,而cdr(cons(3, 4))返回4

     

给出此缺点的实现:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair
     

实施汽车和cdr。

此方法的实际应用是什么?

1 个答案:

答案 0 :(得分:1)

Cons是一个具有2个参数并返回将函数应用为一对的函数的函数,因此我们可以在同一方式下构建carcdr

def car(pair):
    def unpack(a, b):
        return a
    return pair(unpack)


def cdr(pair):
    def unpack(a, b):
        return b
    return pair(unpack)

这是来自函数编程的示例/练习,其中所有内容都可以抽象为函数(简单交谈)。 例如,它在HaskellRacket等语言中都有实际用法。但是我认为这不是真正适合python(IMO)生产的选项。

如您所见,其他代码中没有涉及变量,而是参数本身:

>>> car(cons(1, 2))
1
>>> cdr(cons(1, 2))
2