前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python函数嵌套定义的洪荒之力

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

作者头像
Python小屋屋主
发布于 2018-04-16 06:38:03
发布于 2018-04-16 06:38:03
1.1K0
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解Python函数式编程之map、reduce、filter
map()、reduce()、filter()是Python中很常用的几个函数,也是Python支持函数式编程的重要体现。不过,在Python 3.x中,reduce()不是内置函数,而是放到了标准库functools中,需要先导入再使用。 (1)map()。内置函数map()可以将一个函数依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过该函数处理后的结果,该函数不对原序列或迭代器对象做任何修改。 >>> list(map(str, ran
Python小屋屋主
2018/04/16
1.3K0
详解Python函数式编程之map、reduce、filter
Python函数
位置可变参数可以在普通参数之前, 但是在位置可变参数之后的普通参数变成了keyword-only参数:
职场亮哥
2020/10/10
2.6K0
Python案例篇:七个Python高阶案例
需求:字符串数据’This is \n a \latiao’ --> 得到’This is a test’ 步骤一:使用字符串的split()函数–>作用:可以默认去除字符串中的空格、\n、\t等内容 然后将字符串数据以列表的形式返回
润森
2022/09/22
5890
5.匿名函数,内置函数II,闭包
匿名函数,顾名思义就是没有名字的函数,那么什么函数没有名字呢?这个就是我们以后面试或者工作中经常用匿名函数 lambda,也叫一句话函数。
changxin7
2019/09/10
6480
5.匿名函数,内置函数II,闭包
一文读懂Python 高阶函数
将函数作为参数传入,这样的函数称为高阶函数。函数式编程就是指这种高度抽象的编程范式。 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。如下所示:
Wu_Candy
2022/07/04
2780
一文读懂Python 高阶函数
Python匿名函数/排序函数/过滤函数
  lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数
py3study
2020/01/15
1.1K0
Python基础之(七)函数
在Python中,规定了一种定义函数的格式,下面的举例就是一个函数,以这个函数为例来说明定义函数的格式和调用函数的方法。
py3study
2020/01/03
4800
匿名函数,内置函数,闭包
练习: def func(a,b): return a + b print(func(4,5)) # 构建匿名函数 func1 = lambda a,b: a + b print(func1(1,2))
py3study
2020/01/16
5950
开源图书《Python完全自学教程》7.4函数式编程
函数式编程(Functional Programming)是一种编程范式,虽然不是本书重点阐述的内容,但 Python 语言很早就已经采用了一些函数式编程的概念,如1994年发布的 Python 版本中就已经有了 map()、reduce()、filter() 和 lambda 运算。之所以 Python 能支持函数式编程,是因为函数在 Python 中是第一类对象(参阅7.3.1节)。
老齐
2022/07/06
3180
Python: 函数式编程
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回,比循环更简洁,更易读。
用户2183996
2018/06/21
6710
Python基础(十九):函数加强
把函数作为参数传入 ,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
Lansonli
2022/12/29
5670
Python基础(十九):函数加强
Python基础之函数加强
所有功能函数都是操作学员信息,所有存储所有学员信息应该是一个全局变量,数据类型为列表。
海仔
2020/08/17
5180
【Python环境】Python函数式编程指南(3):迭代器
3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。 迭代器不能回退,只能往前进行迭代。这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作。 迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作。但如果小心谨慎,或者干脆贯彻函数式思想坚持使用不可变的集合,那这也不是什么大问题。 对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引
陆勤_数据人网
2018/02/26
8190
【Python环境】Python函数式编程指南(2):函数
2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return x + y 关于参数和返回值的语法细节可以参考其他文档,这里就略过了。 使用lambda可以定义简单的单行匿名函数。lambda的语法是: lambda args: expression 参数(args)的语法与普通函数一样,同时表达式(expression)的值就是匿名函数调用的返回值;而lambda表达式返回这个匿名函数。如果我们给匿名函数取个名字,就像这样: lambda_add = la
陆勤_数据人网
2018/02/26
7920
Python常用高阶函数(文末粉丝红包)
高阶函数的定义:接收函数作为参数,或者将函数作为返回值的函数。函数式编程就是指这种高度抽象的编程范式。
吾非同
2020/11/04
4540
Python常用高阶函数(文末粉丝红包)
Python 中的万能之王 Lambda 函数
Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务,便在正常过程中使用lambda函数。
数据STUDIO
2022/05/24
1.5K0
第十四天-内置函数
内置函数: 传送门 ————————————————— # 匿名函数 # 为了解决一些简单的需求⽽设计的一句话函数 不需要def来声明 一句话就可以声明一个函数 # 函数名 = lambda 参数:
py3study
2020/01/20
2650
python函数的用法
  3.函数可以当作一个值赋值给一个变量 例:a=myprint()    a()
py3study
2020/01/17
5290
挑战30天学完Python:Day14 高级函数、闭包和装饰器
从上面的例子中可以看到,高阶函数根据传递的参数返回不同计算函数,然后在进行最后赋值计算。
MegaQi
2023/10/21
2410
挑战30天学完Python:Day14 高级函数、闭包和装饰器
Python装饰器、内置函数之金兰契友
装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种。所以也可以理解装饰器是一种特殊的函数。 因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展,而对源代码的修改是封闭的。 开放封闭原则主要体现在两个方面:
py3study
2020/01/17
3840
相关推荐
详解Python函数式编程之map、reduce、filter
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档