Crossin的编程教室
标题: 【Python 第70课】lambda 表达式 [打印本页]
作者: crossin先生 时间: 2014-6-11 15:25
标题: 【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 表达式还有一个重要作用就是,看懂别人写的代码。
作者: lovingyun 时间: 2014-9-24 00:12
这个lambda表达式的作用应该是和C语言中的define一样吧
作者: crossin先生 时间: 2014-9-24 10:52
lovingyun 发表于 2014-9-24 00:12
这个lambda表达式的作用应该是和C语言中的define一样吧
有点类似,但不完全一样
作者: liu-pengfei 时间: 2014-9-27 00:47
有点意思,看看。
作者: liu-pengfei 时间: 2014-9-30 00:20
先生,“而对于像 filter、sort 这种需要内嵌函数的方法,lambda 表达式就会显得比较合适。这个我以后会再单独介绍。”
作者: ngtf 时间: 2015-3-31 22:18
又来学习
作者: muneer 时间: 2015-4-14 14:59
了解 lambda 表达式还有一个重要作用就是,看懂别人写的代码。
这句话。。。。
作者: cross 时间: 2015-4-22 15:38
该用户从未签到
作者: hanxuejiao 时间: 2015-12-9 16:57
请问先生a = fn(2)这句是不是相当于把lambda的函数名定义为a,这样下一步a(3)就直接调用lambda了?
作者: crossin先生 时间: 2015-12-9 21:19
hanxuejiao 发表于 2015-12-9 16:57
请问先生a = fn(2)这句是不是相当于把lambda的函数名定义为a,这样下一步a(3)就直接调用lambda了? ...
不仅仅是名称,同时设定了x的值为2
作者: 草办 时间: 2015-12-15 15:30
get
作者: Kunz 时间: 2015-12-19 14:02
我看到回帖奖励金币就来试试了~~还没学到70课呢~~
作者: crossin先生 时间: 2015-12-19 23:45
Kunz 发表于 2015-12-19 14:02
我看到回帖奖励金币就来试试了~~还没学到70课呢~~
作者: 我是一个小菜鸟 时间: 2016-1-11 11:27
lambda函数和c语言的define相似点在哪呢?
作者: crossin先生 时间: 2016-1-11 12:19
我是一个小菜鸟 发表于 2016-1-11 11:27
lambda函数和c语言的define相似点在哪呢?
define 也可以用来定义一个函数的别名
作者: 我是一个小菜鸟 时间: 2016-1-11 15:21
crossin先生 发表于 2016-1-11 12:19
define 也可以用来定义一个函数的别名
额,def
作者: catherinemic 时间: 2016-2-25 10:39
来拿金币,话说有了金币有什么用呢?
作者: crossin先生 时间: 2016-2-25 13:57
catherinemic 发表于 2016-2-25 10:39
来拿金币,话说有了金币有什么用呢?
金币乃身外之物
作者: exchen 时间: 2016-4-15 16:03
a(3)是什么意思??
作者: crossin先生 时间: 2016-4-15 17:44
exchen 发表于 2016-4-15 16:03
a(3)是什么意思??
a这里是一个函数,3作为参数来调用这个函数
作者: 墨允 时间: 2017-3-8 16:16
断断续续学了半年才学到这里也是没sei了
作者: crossin先生 时间: 2017-3-8 17:21
墨允 发表于 2017-3-8 16:16
断断续续学了半年才学到这里也是没sei了
能坚持下来就是胜利。之后可以开始想点项目来做
作者: 王asura 时间: 2017-8-17 12:54
学习了~
作者: blueheart 时间: 2017-8-25 16:46
为什么这里没有输出结果呢?
作者: crossin先生 时间: 2017-8-26 12:01
blueheart 发表于 2017-8-25 16:46
为什么这里没有输出结果呢?
函数到return就退出了,不会执行后面的语句
作者: blueheart 时间: 2017-8-27 09:18
crossin先生 发表于 2017-8-26 12:01
函数到return就退出了,不会执行后面的语句
哦~~~~~,多谢Crossin先生
作者: ZFlyee 时间: 2018-3-11 17:23
这个厉害
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |