您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:09-07来源:作者:点击数:

本文重点在于: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]

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门