了解闭包在 python 中的工作原理
Understanding how closure works in python
有人可以帮我理解下面的代码是如何工作的吗?
这段代码的目的是接收两个元素,使它们成为一对,Function car returns 第一个元素和 Function cdr returns 最后一个元素。
我无法理解闭包的确切工作原理。我了解 lambda 的工作原理,但仍然遇到以下问题:
- 此代码的分步流程
- 为什么 pair(f) 只接受一个输入,它打算接受 2 个元素并将它们变成一对
- 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")
有人可以帮我理解下面的代码是如何工作的吗? 这段代码的目的是接收两个元素,使它们成为一对,Function car returns 第一个元素和 Function cdr returns 最后一个元素。
我无法理解闭包的确切工作原理。我了解 lambda 的工作原理,但仍然遇到以下问题:
- 此代码的分步流程
- 为什么 pair(f) 只接受一个输入,它打算接受 2 个元素并将它们变成一对
- 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")