Python 之内置函数:filter、map、reduce、zip、enumerate这几个函数在 Python 里面被称为高阶函数,本文主要学习它们的用法 。
filter 函数原型如下:
第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对iterable序列依次执行function(item)操作,返回结果是过滤之后结果组成的序列 。
简单记忆:对序列中的元素进行筛选 , 获取符合条件的序列 。
返回结果为:,使用list函数可以输入序列内容 。
map 函数原型如下:
该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;
下述代码是一个简单的测试案例:
上述代码运行完毕,得到的结果是:。使用print(list(my_new_list))可以得到结果 。
map函数的第一个参数,可以有多个参数,当这种情况出现后,后面的第二个参数需要是多个序列 。
map 函数解决的问题:
reduce 函数原型如下:
第一个参数是函数,第二个参数是序列,返回计算结果之后的值 。该函数价值在于滚动计算应用于列表中的连续值 。
测试代码如下:
最终的结果是 6,如果设置第三个参数为 4,可以运行代码查看结果 , 最后得到的结论是 , 第三个参数表示初始值,即累加操作初始的数值 。
简单记忆:对序列内所有元素进行累计操作 。
zip 函数原型如下:
zip函数将可迭代的对象作为参数 , 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表 。
如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象相同,利用星号(*)操作符,可以将元组解压为列表 。
测试代码如下:
展示如何利用*操作符:
输出结果如下:
简单记忆:zip 的功能是映射多个容器的相似索引,可以方便用于来构造字典 。
enumerate 函数原型如下:
参数说明:
该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标 , 一般用在for循环当中 。
测试代码如下:
返回结果为:。
本文涉及的函数可以与 lambda 表达式进行结合 , 能大幅度提高编码效率 。最好的学习资料永远是官方手册
Python 函数进阶-高阶函数高阶函数就是能够把函数当成参数传递的函数就是高阶函数,换句话说如果一个函数的参数是函数 , 那么这个函数就是一个高阶函数 。
高阶函数可以是你使用def关键字自定义的函数,也有Python系统自带的内置高阶函数 。
我们下面的例子中,函数 senior 的参数中有一个是函数,那么senior就是一个高阶函数;函数 tenfold 的参数不是函数,所以tenfold就只是一个普通的函数 。
function:函数,可以是 自定义函数 或者是 内置函数;
iterable:可迭代对象,可迭代性数据 。(容器类型数据和类容器类型数据、range对象、迭代器)
把可迭代对象中的数据一个一个拿出来,然后放在到指定的函数中做处理,将处理之后的结果依次放入迭代器中 , 最后返回这个迭代器 。
将列表中的元素转成整型类型,然后返回出来 。
列表中的每一个数依次乘 2的下标索引 1 次方 。使用自定义的函数,配合实现功能 。
参数的意义和map函数一样
filter用于过滤数据 , 将可迭代对象中的数据一个一个的放入函数中进行处理,如果函数返回值为真,将数据保留;反之不保留,最好返回迭代器 。
保留容器中的偶数
参数含义与map、filter一致 。
计算数据,将可迭代对象的中的前两个值放在函数中做出运算,得出结果在和第三个值放在函数中运算得出结果 , 以此类推 , 直到所有的结果运算完毕,返回最终的结果 。
根据功能我们就应该直到,reduce中的函数需要可以接收两个参数才可以 。
将列表中的数据元素组合成为一个数,
iterable:可迭代对象;
key:指定函数 , 默认为空;
reverse:排序的方法,默认为False , 意为升序;
如果没有指定函数,就单纯的将数据安札ASCII进行排序;如果指定了函数,就将数据放入函数中进行运算,根据数据的结果进行排序,返回新的数据,不会改变原有的数据 。
注意,如果指定了函数,排序之后是根据数据的结果对原数据进行排序,而不是排序计算之后的就结果数据 。
将列表中的数据进行排序 。
还有一点就是 sorted 函数可以将数据放入函数中进行处理,然后根据结果进行排序 。
既然有了列表的内置函数sort,为什么我们还要使用sorted函数呢?
高阶函数就是将函数作为参数的函数 。
文章来自
Python基础之常见内建函数map() 函数接受两个参数,一个是函数 , 一个是可迭代对象(Iterable), map 将传入的函数依次作用到可迭代对象的每一个元素,并把结果作为迭代器(Iterator)返回 。
举例说明,有一个函数 f(x)=x^2,要把这个函数作用到一个list [1,2,3,4,5,6,7,8,9] 上:
运用简单的循环可以实现:
运用高阶函数 map() :
结果 r 是一个迭代器 , 迭代器是惰性序列 , 通过 list() 函数让它把整个序列都计算出来并返回一个 list。
如果要把这个list所有数字转为字符串利用 map() 就简单了:
小练习:利用 map() 函数,把用户输入的不规范的英文名字变为首字母大写其他小写的规范名字 。输入 ['adam', 'LISA', 'barT'] ,输出 ['Adam', 'Lisa', 'Bart']
reduce() 函数也是接受两个参数,一个是函数,一个是可迭代对象,reduce 将传入的函数作用到可迭代对象的每个元素的结果做累计计算 。然后将最终结果返回 。
效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
举例说明,将序列 [1,2,3,4,5] 变换成整数 12345 :
小练习:编写一个 prod() 函数 , 可以接受一个 list 并利用 reduce 求积:
map() 和 reduce() 综合练习:编写 str2float 函数,把字符串 '123.456' 转换成浮点型 123.456
filter() 函数用于过滤序列 , filter() 也接受一个函数和一个序列,filter() 把传入的函数依次作用于每个元素 , 然后根据返回值是 True 还是 False 决定保留还是丢弃该元素 。
举例说明,删除list中的偶数:
小练习:用 filter() 求素数
定义一个筛选函数:
定义一个生成器不断返回下一个素数:
打印100以内素数:
python内置的 sorted() 函数可以对list进行排序:
sorted() 函数也是一个高阶函数,还可以接受一个 key 函数来实现自定义排序:
key 指定的函数将作用于list的每一个元素上,并根据 key 函数返回的结果进行排序.
默认情况下,对字符串排序 , 是按照ASCII的大小比较的,由于'Z''a',结果,大写字母Z会排在小写字母a的前面 。如果想忽略大小写可都转换成小写来比较:
要进行反向排序,不必改动key函数,可以传入第三个参数 reverse=True :
小练习:假设我们用一组tuple表示学生名字和成绩: L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]。用sorted()对上述列表分别按c成绩从高到低排序:
运用匿名函数更简洁:
python高阶函数有哪些1、map
map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回 。
举例,比如我们有一个函数f(x)=x*2 , 要把这个函数作用在一个list[1, 2, 3, 4, 5, 6, 7, 8,
9]上 , 就可以用map()实现 。
def f(x):
... return x*2
...
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
list(r)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x*2,还可以计算任意复杂的函数,比如把这个list所有的数字转为字符串:
list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
2、reduce
reduce是把一个函数作用在一个序列[x1, x2,
x3……]上 , 这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累计计算 。简单来说 , 就是先计算x1和x2的结果,再拿结果与x3计算,依次类推 。比如说一个序列求和,就可以用reduce实现 。
from functools import reduce
def add(x, y):
... return xy
...
reduce(add, [1, 3, 5, 7, 9])
25
也就是说,假设python没有提供int()函数,你完全可以自己写一个把字符串转化为整数的函数,而且只需要几行代码 。
3、filter
用于过滤序列,和map函数类似 , filter也接收一个函数和一个序列,不同于map的是,filter把传入的函数依次作用于每一个元素 , 然后根据返回值是True还是False决定保留还是丢弃该元素,例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
把一个序列中的空字符串删掉,可以这么写:
def not_empty(s):
return s and s.strip()
list(filter(not_empty, ["A", "", "B", None, "C", " "]))
# 结果: ["A", "B", "C"]
可见用filter()这个高阶函数,关键在于正确实现一个筛选函数 。
4、sorted
无论冒泡排序还是快速排序,排序的核心是比较两个元素的大小 。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来,Python内置的sorted()函数就可以对list进行排序:
sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函数也是一个高阶函数 , 它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
一文读懂Python 高阶函数将函数作为参数传入python五阶函数表示,这样python五阶函数表示的函数称为高阶函数 。函数式编程就是指这种高度抽象的编程范式 。
变量可以指向函数 , 函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 。如下所示:
map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回 。
定义一个匿名函数并调用,定义格式如--lambda arg1,arg2…:表达式
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算 。
filter() 函数用于过滤序列,过滤掉不符合条件的元素 , 返回由符合条件元素组成的新列表 。
闭包的定义python五阶函数表示?闭包本质上就是一个函数
如何创建闭包?
如何使用闭包?典型的使用场景是装饰器的使用 。
global与nonlocal的区别:
简单的使用如下:
偏函数主要辅助原函数,作用其实和原函数差不多,不同的是,python五阶函数表示我们要多次调用原函数的时候,有些参数,我们需要多次手动的去提供值 。
而偏函数便可简化这些操作,减少函数调用 , 主要是将一个或多个参数预先赋值 , 以便函数能用更少的参数进行调用 。
我们再来看一下偏函数的定义:
类func = functools.partial(func, *args, **keywords)
我们可以看到,partial 一定接受三个参数,从之前的例子,我们也能大概知道这三个参数的作用 。简单介绍下:
总结
本文是对Python 高阶函数相关知识的分享,主题内容总结如下:
【包含python五阶函数表示的词条】python五阶函数表示的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、python五阶函数表示的信息别忘了在本站进行查找喔 。
推荐阅读
- 召唤手游角色扮演游戏,召唤游戏人物
- pg数据库ip地址如何排序sql,ping数据库ip
- 亲子益智冰淇淋游戏,冰淇淋玩法
- 网红小胖直播,网红小胖直播遇害
- 关于windows系统凭证的信息
- 西瓜和吉吉哪个好ios,西瓜好还是苹果好
- 大班角色扮演染发游戏,大班角色扮演染发游戏教案反思
- 定西市网站制作软件开发,定西网站设计公司
- vb.net各个版本 vbnet reportviewer