python - lambda x : lambda: x 的用途

标签 python lambda closures interpreter

我正在阅读 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 使用来自外部 lambdax 变量,因此 Python 需要为 x< 创建一个闭包单元变量。调用外部 lambda:

(lambda x: lambda: x)(value)

为内部 lambda 创建一个函数对象,其中包含一个用于保存 valuex 变量的闭包单元,以及 __closure__ 访问:

return fn.__closure__[0]

访问函数对象的闭包变量元组以检索并返回闭包单元。

关于python - lambda x : lambda: x 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138534/

相关文章:

python - 使用python在树莓派中进行I2C通信

python - 带有类别 slug 的 django 组子类别

java - 如何让 TreeMap 以数组为键工作?

javascript - JS : Why do you not return inner function with `function` word around it?

python - 如何使用参数在 SELECT 语句中选择一列或多列

python - 我在运行类设计时遇到问题,需要帮助找出问题所在

Java 用 lambda 替换方法

ruby - 本地跳转错误 : unexpected return

JavaScript - 为什么此代码记录 'undefined' 但显示在 Chrome 控制台中? (关闭)

laravel - 'return $next($request)' 在 Laravel 中间件中做什么?