首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python函数嵌套定义的洪荒之力

Python函数嵌套定义的洪荒之力

作者头像
Python小屋屋主
发布2018-04-16 14:38:03
1.1K0
发布2018-04-16 14:38:03
举报
文章被收录于专栏:Python小屋Python小屋

本文重点在于:Python允许函数的嵌套定义,这在有些情况下会带来很多方便。

感谢中国石油大学(华东)计算机与通信工程学院李昕老师提供问题。

假设有个列表,内容如下:

>>> x = list(range(20))

>>> x

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

现在我们想得到一个新列表,其中每个值都是x中元素值加5,这很容易用Python内置函数map()实现,例如:

>>> list(map(lambda i: i+5, x))

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

如果我们想看看哪些元素值大于5,可以像下面这样来做:

>>> list(map(lambda i: i>5, x))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

好了,现在我们有个新需求,就是让这个固定的5是可变的,不使用常数,而是改为一个变量,同时保持问题性质不变,这样用起来就更加灵活了。但问题在于map()函数只能接收一个函数和1个或多个序列作为参数,并不能直接满足我们的需求。

当当当当,其实我们这样来做:

>>> def myMap(lst, value):

return map(lambda i: i>value, lst)

>>> list(myMap(x, 5))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

>>> list(myMap(x, 10))

[False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True]

针对上面简单的需求,我们想要的功能已经实现了,如果我们要做的处理过于复杂而无法使用一个lambda表达式来实现,就只好拿出我们的大杀器了:嵌套函数定义。

>>> def myMap(lst, value):

def func(x):

return x>value

return map(func, lst)

让我们试一下好用不好用:

>>> list(myMap(x, 5))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

>>> list(myMap(x, 10))

[False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True]

和我们想要的功能完全一致。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档