今天写了一个简单的python脚本,经过朋友提醒,发现能使用lambda语法来使语句更加直观和便于阅读。当然,我学语言一般是从使用开始,所以语言的完整教材我是从没有看过的,也许这个用法在教材里已经说过了。
比如,我们有这样一个问题。有一个数组A = 1,2,3,4,5,6,7。我们想根据该数组生成一个新的数组B,使其包含数组A里的所有奇数。那么我们普通的做法可能是:
>>> arrayA = [1,2,3,4,5,6,7]
>>> arrayB = []
>>> for number in arrayA:
if number % 2:
arrayB.append(number)
>>> print arrayB
[1, 3, 5, 7]
>>>
而lambda语法能大大地优化这个写法。lambda语法其实就是一种用来临时定义函数对象的方法,根据这种语法,我们不需要费事地去重新定义一个函数,而直接就可以用一个表达式来表示一个未命名的函数。让我们看看用lambda语法如何写这段程序吧:
>>> arrayA = [1,2,3,4,5,6,7]
>>> arrayB = [ number for number in arrayA if number % 2 ]
>>> print arrayB
[1, 3, 5, 7]
>>>
是不是优雅多了?我们把这段代码用括号分成三个部分:
(number) (for number in arrayA) (if number % 2)
第一部分,表面我们的新数组的元素表示为number;第二部分,是说number是取之于数组arrayA的遍历;第三部分,是说是否产生该元素的条件,也就是说当number取2的摸为非0数的时候(也就是奇数),我们选取该number。
了解了这个语法后,我们可以轻松写出一些稍为复杂点的逻辑。
比如,我们有4个人的资料:
>>> person1 = {
'surname': 'Wang',
'givename': 'Shawn',
'age': 16
}
>>> person2 = {
'surname': 'Lee',
'givename': 'How',
'age': 20
}
>>> person3 = {
'surname': 'Lao',
'givename': 'Suo',
'age': 25
}
>>> person4 = {
'surname': 'Lao',
'givename': 'Shi',
'age': 10
}
这四个人都想去观看成人电影,我们把他们放到一个数组里:
>>> people_who_want_to_watch_av_film = [
person1, person2, person3, person4
]
然后,我们检查他们的年龄,产生能够观看的人员的列表,并打印出来:
>>> people_who_can_watch_av_film = [
'Hi, %s %s, you can watch av!' % (person['surname'], person['givename'])
for person in people_who_want_to_watch_av_film
if person['age'] >= 18
]
>>> for words in people_who_can_watch_av_film: print words
Hi, Lee How, you can watch av!
Hi, Lao Suo, you can watch av!
>>>
最后,我要严重声明,该例子纯属虚构,如有雷同,纯属巧合!
相关文章