python3之匿名函数理解

1. 为什么会有匿名函数

在实际函数定义中,有时为了定义一个简单功能的函数,比如如下所示:

def add(x,y):
    return x+y

需要俩行来完成一个简单的加法功能,并且还会浪费一个函数的命名空间,那么有没有更简单的一些方法呢?

答案肯定是有的,那就是匿名函数lambda。不需要def来定义函数。

add = lambda x, y: x+y

上方代码即为对应的匿名函数的写法。

2. 匿名函数特性

  • lambda 只是一个表达式,所以比def定义一个函数简单很多。
  • lambda 是一个表达式,不是一个代码块,则封装的逻辑信息是有限的。
  • lambda 有自己的命名空间,则不能访问自己参数列表之外或者全局命名空间里的参数。

3. 语法结构

lambda [arg1,[arg2 ...argn]]: experssion

arg1,arg2,***argn 为参数信息,类比于函数传递的参数,也可不传递参数

experssion 为具体实现逻辑关系的表达式

4. 举例说明

  • 无参数匿名函数
>>> swift = lambda : print("Hello lambda!!")
>>> swift
<function <lambda> at 0x1025807b8>
>>> swift()
Hello lambda!!
  • 带参数匿名函数
>>> swift = lambda name: print("hello %s" % name)
>>> swift
<function <lambda> at 0x10259f400>
>>> swift("Swift")
hello Swift
  • 变量变动捕获
>>> x = 10
>>> a = lambda y: x+y
>>> x = 20
>>> b = lambda y: x+y
>>> a(10)
30
>>> b(10)
30

由于x是一个自由变量,而且匿名函数是在运行时才绑定x的值,所以a,b中x的值都是为20,最后结果都会是30。

  • 闭包
>>> def func1(num):
...     return lambda x: x+num
... 
>>> num = func1(10)
>>> num
<function func1.<locals>.<lambda> at 0x10259f1e0>
>>> num(20)
30

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值