详解Python匿名函数(lambda函数)

 更新时间:2019年04月19日 11:46:17   作者:luckycyong  
这篇文章主要介绍了Python匿名函数(lambda函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

匿名函数lambda

Python使用lambda关键字创造匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。其语法是:

lambda [arg1[, arg2, ... argN]]: expression

其中,参数是可选的,如果使用参数的话,参数通常也会在表达式之中出现。

下面举例来说明lambda语句的使用方法(无参数)。

# 使用def定义函数的方法
def true():
  return True

#等价的lambda表达式
>>> lambda :True
<function <lambda> at 0x0000000001E42518>

# 保留lambda对象到变量中,以便随时调用
>>> true = lambda :True
>>> true()
True

下面再举一个带参数的例子。

# 使用def定义的函数
def add( x, y ):
  return x + y

# 使用lambda的表达式
lambda x, y: x + y

# lambda也允许有默认值和使用变长参数
lambda x, y = 2: x + y
lambda *z: z

# 调用lambda函数
>>> a = lambda x, y: x + y
>>> a( 1, 3 )
4
>>> b = lambda x, y = 2: x + y
>>> b( 1 )
3
>>> b( 1, 3 )
4
>>> c = lambda *z: z
>>> c( 10, 'test')
(10, 'test')

但由于lambda表达式特殊的设计,在特定的场景中也带来了一些不同的体验。

lambda是一个表达式,不是一个语句 这就使它能够出现在一些def不能出现的地方,比如,列表常量中。

lambda是单个的表达式,不是一个代码块 lambda的设计是为了满足简单函数的场景,仅能封装有限的逻辑,有复杂逻辑的情况有def来处理,所以lambda的功能要比def小的多。

另外,lambda表达式是可以嵌套的

>>> action = (lambda x : (lambda y : x + y))
>>> a = action(10)
>>> a(5)
15

这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量。

匿名函数的使用

匿名函数通常被用作高阶函数(higher-order function,参数为函数的函数)的参数。比如,几个内置函数:filter(),map(),reduce()。下面我们分别看看这几个函数的用法及达到相同效果的python另一种特征的用法

filter函数

>>> list = [1, 2, 3]
>>> result = filter(lambda x: x%2==0, list)
>>> result
[2]
>>> result = [x for x in list if x%2==0]
>>> result
[2]

map函数

>>> result = map(lambda x: x*2, list)
>>> result
[2, 4, 6]
>>> result = [x*2 for x in list]
>>> result
[2, 4, 6]

reduce函数

>>> result = reduce(lambda x, y: x+y,list)
>>> result
6
>>> result = sum(list)
>>> result
6

除reduce函数的替代用法比较特殊外,map和filter函数都可以使用列表推导式(list comprehension)代替。据说,当年lambda是一个Lisp程序员给python加的,而Guido是强烈反对的,他中意的是列表推导式。

跳转表(jump table)

lambda的另一种用法是用来编写跳转表,也就是行为列表或字典,能按需执行特定的动作。

>>> key = "get"
>>> {"abc":(lambda : 2 + 2),"bcd" : (lambda : 3 + 3), "get" : (lambda : 4 + 4)}[key]()
8

这样在字典中,每个lambda都留下了一个后续可以调用的函数,通过索引可以取出来,并调用。这就使字段可以成为更加通用的多路分支工具。

以上所述是小编给大家介绍的Python匿名函数(lambda函数)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 使用Python实现XLS和XLSX之间的相互转换

    使用Python实现XLS和XLSX之间的相互转换

    在日常工作中,我们经常需要处理和转换不同格式的Excel文件,以适应不同的需求和软件兼容性,Excel文件的两种常见格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文将详细介绍如何使用Python在XLS和XLSX格式之间进行转换,需要的朋友可以参考下
    2024-09-09
  • 在Django中实现添加user到group并查看

    在Django中实现添加user到group并查看

    今天小编就为大家分享一篇在Django中实现添加user到group并查看,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python自定义类并使用的方法

    python自定义类并使用的方法

    这篇文章主要介绍了python自定义类并使用的方法,涉及Python中类的定义与使用技巧,需要的朋友可以参考下
    2015-05-05
  • 想学python 这5本书籍你必看!

    想学python 这5本书籍你必看!

    想学python,这5本书籍你必看!本文为大家推荐了学习python的5本书籍,5本经典书籍,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python urllib 入门使用详细教程

    Python urllib 入门使用详细教程

    urllib 库,它是 Python 内置的 HTTP 请求库,不需要额外安装即可使用,这篇文章主要介绍了Python urllib 入门使用,需要的朋友可以参考下
    2022-11-11
  • Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法

    Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法

    matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图,下面这篇文章主要给大家介绍了关于Python常见库matplotlib学习笔记之画图中各个模块的含义及修改方法的相关资料,需要的朋友可以参考下
    2023-05-05
  • Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作

    Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作

    这篇文章主要介绍了Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作,涉及Python使用str.startswith()和str.endswith()方法针对字符串开始或结尾处特定文本匹配操作相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • Python使用回溯法子集树模板解决爬楼梯问题示例

    Python使用回溯法子集树模板解决爬楼梯问题示例

    这篇文章主要介绍了Python使用回溯法子集树模板解决爬楼梯问题,简单说明了爬楼梯问题并结合实例形式给出了Python回溯法子集树模板解决爬楼梯问题的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Win7与Win10下的Tensorboard可视化问题

    Win7与Win10下的Tensorboard可视化问题

    这篇文章主要介绍了Win7与Win10下的Tensorboard可视化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python中正则表达式的使用方法

    python中正则表达式的使用方法

    正则表达式经常被用到,而自己总是记不全,汇总一份完整的以备不时之需。
    2018-02-02

最新评论