Python 匿名函数lambda 详情

 更新时间:2022年03月22日 16:31:52   作者:宇宙之一粟  
这篇文章主要介绍了 Python 匿名函数lambda,​​lambda​​​  函数返回函数本身而不是将其赋值给一个变量名。所以它也被称为匿名函数,下文更多相关内容需要的小伙伴可以参考一下

1.前言

在 Python 中,说到函数,大家都很容易想到用 ​​def​​ 关键字来声明一个函数:

def Hello():
    # function body

然后我们可以在​添加由圆括号括起来的参数列表。函数体内可能有很多行代码,里面有尽可能多的语句和表达式。​

除了 ​​def​​​ 语句定义函数以外,还有一种生成函数对象的表达式形式: ​​lambda​​ 表达式,这个表达式创建了一个能够随时调用的函数。

有时声明一个函数只有一条语句,比如:

def square(x):
    return x*2

(没有​​lambda​​​  函数返回函数本身而不是将其赋值给一个变量名。所以它也被称为匿名函数函数名)。 ​​lambda​​​  的一般形式是关键字 ​​lambda​​ 后面跟上一个或者多个参数,之后是一个冒号,再之后是一个表达式:

lambda argument1, argument2, ... argumentN: expression using argument

lambda 表达式所返回的函数对象与 def 创建并赋值后的函数对象工作起来是完全一样。一个 lambda 函数可以有尽可能多的参数,但函数体必须是一个表达式。

2.如何使用 lambda

​​lambda​​  只能包含一个表达式,通常用作内联函数的定义,或者用作推迟一些代码的执行。

再来看上面的平方的例子:

def square(x):
    return x*x

a_list = [1, 2, 3, 4, 5]
aa_list = list(map(square, a_list))
print(aa_list) # [1, 4, 9, 16, 25]

上述代码就是 lambda 函数使用的好地方,使用更少的代码行,并且可以避免创建仅使用一次的命名函数(然后必须存储在内存中)。​您可以编写一个将其参数平方的 lambda 函数: ​​lambda x: x*2​​ ,并将其与 map 函数一起使用以将列表中的所有元素进行平方运算:

a_list = [1, 2, 3, 4, 5, 6]
aa_list = list(map(lambda x: x*2, a_list))
print(aa_list) # [2, 4, 6, 8, 10, 12]

如果在短时间需要一个小函数,​可以使用 lambda 函数——例如作为 map 或 filter 等高阶函数的参数,可以我们利用 lambda 来筛选偶数:

a_list = [1, 2, 3, 4, 5, 6]
aa_list = list(filter(lambda x: x%2==0, a_list))
print(aa_list) # [2, 4, 6]

​lambda 函数是在使用它的地方定义的,这样内存中就没有命名函数。如果只在一个地方使用了一个函数,那么使用 lambda 函数来避免混乱是有意义的。

还可以从函数返回 lambda 函数。如果您需要创建多个乘以数字的函数,例如加倍或三倍等,lambda 可以提供帮助。您可以创建一个函数 multiplyBy ,而不是创建多个函数,如下所示,然后使用不同的参数多次调用此函数以创建双倍、三倍等函数:

def muliplyBy (n):
  return lambda x: x*n
  
double = multiplyBy(2)
triple = muliplyBy(3)
times10 = multiplyBy(10)

​​lambda 函数从父函数获取值 n,因此在 double 中 n 的值为 2,在三倍中为 3,在 times10 中为 10。现在使用参数调用这些函数将乘以该数字。

double(6)
> 12
triple(5)
> 15
times10(12)
> 120

如果您在这里没有使用 lambda 函数,则需要在 ​​multiplyBy​​  中定义一个不同的函数,

如下所示:

def muliplyBy (x):
  def temp (n):
    return x*n
  return temp

使用 lambda 函数使用一半的行并使其更具可读性。

3.总结

  • lambda 是一个表达式,而不是语句。因此,lambda 能够出现在 Python 语法不允许 def 出现的地方。例如在一个列表字面量中或者函数调用的参数中,而使用 def 语句虽然函数能通过名称引用,但是必须在其他地方创建,作为一个表达式,lambda 返回一个值(一个新的函数),可以选择性地被赋值给一个变量值。
  • lambda 的主体是一个单独的表达式,而不是一个代码块。 lambda 的主体可以像 def 函数体的 return 语句一样,可以将结果写出一个裸露的表达式,而不是显式地返回。
  • lambda 是一个编写简单的函数而设计的,而 def 用来处理更大的任务。

到此这篇关于 Python 匿名函数lambda 的文章就介绍到这了,更多相关 Python 函数lambda 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用一行代码获取上个月是几月

    Python使用一行代码获取上个月是几月

    本文介绍的关于Python时间日期处理,日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,本文主要给大家介绍Python使用一行代码获取上个月是几月的相关知识,感兴趣的朋友一起看看吧
    2018-08-08
  • Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

    Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例

    这篇文章主要介绍了Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python处理PDF及生成多层PDF实例代码

    Python处理PDF及生成多层PDF实例代码

    Python提供了众多的PDF支持库,本篇文章主要介绍了Python处理PDF及生成多层PDF实例代码,这样就能够实现图片扫描上来的内容也可以进行内容搜索的目标
    2017-04-04
  • python通过socket搭建极简web服务器的实现代码

    python通过socket搭建极简web服务器的实现代码

    python的web框架众多,常见的如django、flask、tornado等,其底层是什么还是有些许的疑问,所以查找相关资料,实现浏览器访问,并返回相关信息,本文将给大家介绍python通过socket搭建极简web服务器,需要的朋友可以参考下
    2023-10-10
  • Python判断是否json是否包含一个key的方法

    Python判断是否json是否包含一个key的方法

    今天小编就为大家分享一篇Python判断是否json是否包含一个key的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 详解Django+Uwsgi+Nginx 实现生产环境部署

    详解Django+Uwsgi+Nginx 实现生产环境部署

    这篇文章主要介绍了详解Django+Uwsgi+Nginx 实现生产环境部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Python多线程与同步机制浅析

    Python多线程与同步机制浅析

    线程(Thread)是操作系统能够进行运算调度的最小单位;线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
    2022-12-12
  • python自制包并用pip免提交到pypi仅安装到本机【推荐】

    python自制包并用pip免提交到pypi仅安装到本机【推荐】

    这篇文章主要介绍了python自制包并用pip免提交到pypi仅安装到本机,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 详解python中的json的基本使用方法

    详解python中的json的基本使用方法

    本篇文章主要介绍了python中的json的基本使用方法,在Python中使用json的时候,主要也就是使用json模块,json是以一种良好的格式来进行数据的交互,有兴趣的可以了解一下。
    2016-12-12
  • Python实战之ATM取款机的实现

    Python实战之ATM取款机的实现

    这篇文章主要为大家详细介绍了如何利用Python语言模拟实现ATM取款机功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09

最新评论