lambda x 的用途: lambda: x
The purpose of lambda x: lambda: x
我正在阅读 byterun(一个 python python 解释器)的代码,但我无法理解下面几行关于闭包和 lambda 的内容:
def make_cell(value):
fn = (lambda x: lambda: x)(value)
return fn.__closure__[0]
调用函数倒数第二行:
class Function(object):
__slots__ = [... omit ...]
def __init__(self, name, code, globs, defaults, closure, vm):
self._vm = vm
self.func_code = code
self.func_name = self.__name__ = name or code.co_name
self.func_defaults = tuple(defaults)
self.func_globals = globs
self.func_locals = self._vm.frame.f_locals
self.__dict__ = {}
self.func_closure = closure
self.__doc__ = code.co_consts[0] if code.co_consts else None
kw = {
'argdefs': self.func_defaults,
}
if closure:
kw['closure'] = tuple(make_cell(0) for _ in closure)
self._func = types.FunctionType(code, globs, **kw)
函数的用途是什么?它是如何工作的(尤其是 2 lambda)?
此 lambda x: lambda: x
构造的目的是创建一个 closure cell object,对象 Python 用于实现闭包变量。嵌套的 lambda: x
使用来自外部 lambda
的 x
变量,因此 Python 需要为 x
变量创建一个闭包单元。调用外层 lambda:
(lambda x: lambda: x)(value)
为内部 lambda
创建一个函数对象,并为 x
变量保存 value
和 __closure__
访问:
return fn.__closure__[0]
访问函数对象的闭包变量元组以检索和return闭包单元。
我正在阅读 byterun(一个 python python 解释器)的代码,但我无法理解下面几行关于闭包和 lambda 的内容:
def make_cell(value):
fn = (lambda x: lambda: x)(value)
return fn.__closure__[0]
调用函数倒数第二行:
class Function(object):
__slots__ = [... omit ...]
def __init__(self, name, code, globs, defaults, closure, vm):
self._vm = vm
self.func_code = code
self.func_name = self.__name__ = name or code.co_name
self.func_defaults = tuple(defaults)
self.func_globals = globs
self.func_locals = self._vm.frame.f_locals
self.__dict__ = {}
self.func_closure = closure
self.__doc__ = code.co_consts[0] if code.co_consts else None
kw = {
'argdefs': self.func_defaults,
}
if closure:
kw['closure'] = tuple(make_cell(0) for _ in closure)
self._func = types.FunctionType(code, globs, **kw)
函数的用途是什么?它是如何工作的(尤其是 2 lambda)?
此 lambda x: lambda: x
构造的目的是创建一个 closure cell object,对象 Python 用于实现闭包变量。嵌套的 lambda: x
使用来自外部 lambda
的 x
变量,因此 Python 需要为 x
变量创建一个闭包单元。调用外层 lambda:
(lambda x: lambda: x)(value)
为内部 lambda
创建一个函数对象,并为 x
变量保存 value
和 __closure__
访问:
return fn.__closure__[0]
访问函数对象的闭包变量元组以检索和return闭包单元。