开发者社区> 问答> 正文

匿名函数捕获变量值

你用lambda定义了一个匿名函数,并想在定义时捕获到某些变量的值。

展开
收起
哦哦喔 2020-04-17 13:51:20 730 0
1 条回答
写回答
取消 提交回答
  • 先看下下面代码的效果:
    
    >>> x = 10
    >>> a = lambda y: x + y
    >>> x = 20
    >>> b = lambda y: x + y
    >>>
    现在我问你,a(10)和b(10)返回的结果是什么?如果你认为结果是20和30,那么你就错了:
    
    >>> a(10)
    30
    >>> b(10)
    30
    >>>
    这其中的奥妙在于lambda表达式中的x是一个自由变量, 在运行时绑定值,而不是定义时就绑定,这跟函数的默认值参数定义是不同的。 因此,在调用这个lambda表达式的时候,x的值是执行时的值。例如:
    
    >>> x = 15
    >>> a(10)
    25
    >>> x = 3
    >>> a(10)
    13
    >>>
    如果你想让某个匿名函数在定义时就捕获到值,可以将那个参数值定义成默认参数即可,就像下面这样:
    
    >>> x = 10
    >>> a = lambda y, x=x: x + y
    >>> x = 20
    >>> b = lambda y, x=x: x + y
    >>> a(10)
    20
    >>> b(10)
    30
    >>>
    
    2020-04-17 13:51:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多