了解闭包在 python 中的工作原理

Understanding how closure works in python

有人可以帮我理解下面的代码是如何工作的吗? 这段代码的目的是接收两个元素,使它们成为一对,Function car returns 第一个元素和 Function cdr returns 最后一个元素。

我无法理解闭包的确切工作原理。我了解 lambda 的工作原理,但仍然遇到以下问题:

  1. 此代码的分步流程
  2. 为什么 pair(f) 只接受一个输入,它打算接受 2 个元素并将它们变成一对
  3. f(a,b)是什么意思(为什么f在括号前面?)

非常感谢您!

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

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

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



p = cons("a","b")
print(car(p))

首先,

p = cons("a","b")

因为在cons中,它returnspair,在功能上等同于

def p(f):
    return f("a", "b")

那么,

print(car(p))

其中演变成

print(p(lambda a,b: a))

然后变成

print((lambda a,b: a)("a", "b"))

变成

print("a")