匿名函数lambda

2019年9月9日 / 500次阅读 / Last Modified 2019年9月9日
语法

Python有一种定义函数的机制,叫做lambda。使用lambda关键字定义的函数,也被称为匿名函数。本文介绍如何使用Python的lambda匿名函数。

用举例的方式来说明lambda匿名函数应该是最好的方式:

>>> f = lambda x: x*2
>>> f(3)
6
>>> f(6)
12
>>> f(9)
18
>>> def fwn(x):
...     return x*2
...
>>> fwn(3)
6
>>> fwn(6)
12
>>> fwn(9)
18

以上代码,先定义了一个匿名函数f,此函数有一个参数,函数功能是返回此参数的2倍数。然后使用def定了一个有名的函数fwn(function with name),实现了同样的功能。

f 不是函数名,f 只是一个指向函数地址的变量,lambda定义的函数没有名称,如果失去地址引用,此函数也就消失,无法再被调用了。而def定义的函数,就有个名字,什么时候都可以去调用它。

lambda匿名函数的语法定义:

lambda [arg1 [, agr2,.....argn]] : expression

语句由lambda关键词开始,冒号(:)左边是参数,后边是一个表达式。因此可以看出,这种匿名函数,一行代码就搞定,简化了函数定义。

lambda匿名函数与def定义函数的区别:

  • def创建的函数是有名称的,而lambda没有;
  • Lambda表达式的“:”后面,只能有一个表达式,def则可以有多个;
  • if,for,print等语句不能用于lambda中,def可以;
  • Lambda一般用来定义简单的函数,而def可以定义复杂的函数。

再看几个代码示例:

>>> f = lambda x:x.split()
>>> a = 'a b c d e'
>>> f(a)
['a', 'b', 'c', 'd', 'e']
>>> b = '1 2 3 4  5'
>>> f(b)
['1', '2', '3', '4', '5']

f 指向的匿名函数,实现了使用空格来切分字符串的功能,返回一个切分后的list对象。

>>> g = lambda x,y,z: str(x*y+z)
>>> g(1,2,3)
'5'
>>> g(5,6,7)
'37'

这是个多参数lambda匿名函数的示例。g指向的函数可以接受3个参数,返回这个三个参数的运算结果的字符串。

>>> for i in map(lambda x,y:x*y, range(10), range(5)):
...     print(i)
...
0
1
4
9
16

这是lambda函数在Python内置的map函数中的用法,非常简洁,省去了使用def来定义的函数,可读性也非常好。

需要注意一个细节,lambda匿名函数的参数并不是必须的,例如:

>>> f = lambda:print('abcd')
>>> f
<function  at 0x7f20eac23400>
>>> f()
abcd

无参数的lambda函数特性,常常用来实现tkinter编程的时候,Button对象的command实现传参的功能。

以上就是对Python提供的lambda匿名函数机制的介绍,掌握并熟练使用这样的语法技巧,可以让你写的Python代码更漂亮更优雅。

-- EOF --

本文链接:https://www.pynote.net/archives/1091

留言区

《匿名函数lambda》有1条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    简单点,lambda input:output,就是这样! [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top