专栏首页Crossin的编程教室【Python 第70课】lambda 表达式

【Python 第70课】lambda 表达式

Python 是一门简洁的语言,lambda 表达式则充分体现了 Python 这一特点。

lambda 表达可以被看做是一种匿名函数。它可以让你快速定义一个极度简单的单行函数。譬如这样一个实现三个数相加的函数:

def sum(a, b, c):

return a + b + c

print sum(1, 2, 3)

print sum(4, 5, 6)

输出:

6

15

如果使用 lambda 表达式来实现:

sum = lambda a, b, c: a + b + c

print sum(1, 2, 3)

print sum(4, 5, 6)

输出:

6

15

两种方法的结果是相同的。

lambda 表达式的语法格式:

lambda 参数列表: 表达式

定义 lambda 表达式时,参数列表周围没有括号,返回值前没有 return 关键字,也没有函数名称。

它的写法比 def 更加简洁。但是,它的主体只能是一个表达式,不可以是代码块,甚至不能是命令(print 不能用在 lambda 表达式中)。所以 lambda 表达式能表达的逻辑很有限。

lambda 表达式创建了一个函数对象,可以把这个对象赋值给一个变量进行调用,就像上面的例子中一样。

来看一个复杂一点的例子,把 lambda 表达式用在 def 函数定义中:

def fn(x):

return lambda y: x + y

a = fn(2)

print a(3)

输出:

5

这里,fn 函数的返回值是一个 lambda 表达式,也就等于是一个函数对象。当以参数2来调用 fn 时,得到的结果就是:

lambda y: 2 + y

a = fn(2) 就相当于:

a = lambda y: 2 + y

所以 a(3) 的结果就是5。

lambda 表达式其实只是一种编码风格,这种写法更加 pythonic。这并不意味着你一定要使用它。事实上,任何可以使用 lambda 表达式的地方,都可以通过普通的 def 函数定义来替代。在一些需要重复使用同一函数的地方,def 可以避免重复定义函数。况且 def 函数更加通用,某些情况可以带来更好地代码可读性。

而对于像 filter、sort 这种需要内嵌函数的方法,lambda 表达式就会显得比较合适。这个我以后会再单独介绍。

当然对于初学者来说,了解 lambda 表达式还有一个重要作用就是,看懂别人写的代码。

本文分享自微信公众号 - Crossin的编程教室(crossincode)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2014-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 这些年,你们一起踩过的坑(2)

    上次我们踩坑总结文章 这些年,你们一起踩过的坑(1) 受到了不少同学的认可。我也确信文中所涉及的问题是非常具有普遍性的,对绝大多数初学者都会有帮助。

    Crossin先生
  • Python 中的 time 模块

    写代码时,常常会遇到处理时间和日期的问题。在 Python 中,与时间处理最相关的模块是 time 和 datetime。今天我们介绍下 time 模块的常用功...

    Crossin先生
  • Github 助你实现“家国梦”

    毕竟是开发过王者荣耀的天美工作室出品,游戏画风看着挺舒服,又是我这种佛系玩家+强迫症喜欢的放置类游戏。于是乎,沉迷了好几天……

    Crossin先生
  • 【Python学习笔记之三】lambda表达式用法小结

    除了def语句之外,Python还提供了一种生成函数对象的表达式形式。由于它与LISP语言中的一个工具很相似,所以称为lambda。就像def一样,这个表达式创...

    Angel_Kitty
  • Python学习笔记十(lambda表达式)

    lambda是一个表达式,并不像def一样定义一个复杂的函数,很简洁的一个代码块。通常被用来创建匿名函数。lambda的好处也很明显,首先省去了函数的定义过程,...

    世纪访客
  • python lambda表达式的介绍和使用

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

    DoubleV
  • Python结巴分词,字符串余弦相似度算法实现关键词筛选及整理

    字符串余弦相似性算法是通过利用我们初中就学过的三角函数中的余弦定理来计算两个字符串的相似度,它是定义在向量空间模型(Vector Space Model)中的。

    二爷
  • JAVA8之lambda表达式详解

    Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)

    哲洛不闹
  • 函数和方法的区别

    黑泽君
  • Javascript 闭包与变量

    JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值。闭包所保存的是整个变量对象,而不是某个特殊的值。

    大道七哥

扫码关注云+社区

领取腾讯云代金券