python - 简单用例的闭包

标签 python closures

我不明白下面的面试练习题:

cons(a, b) constructs a pair, and car(pair) and cdr(pair) return the first and last element of that pair. For example, car(cons(3, 4)) returns 3, and cdr(cons(3, 4)) returns 4.

Given this implementation of cons:

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

Implement car and cdr.

这有什么实际应用?

最佳答案

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

关于python - 简单用例的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427150/

相关文章:

python - 如何根据计算条件新建一列?

Python 元编程 : generate a function signature with type annotation

Python 使用请求时错误的 SSL 版本

javascript - JavaScript 中匿名函数中的参数变量

Swift-Firebase 身份验证登录功能在呈现的 segue 中,如何使用 shouldPerformSegue 来阻止 segue 执行?

ios - 使用闭包初始化属性时将自己设置为委托(delegate)

python - 想要更改此代码以使用 python3 在 Excel 中编写吗?

python - 如何在Python中解析JSON以获取特定值

java - 线程 "main"java.lang.NoSuchMethodError : com. google.common.collect.ImmutableList.toImmutableList()Ljava/util/stream/Collector 中出现异常;

c++ - 包装一个可能返回 void 的可调用对象