python之高阶函数和匿名函数
map()
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def func(x):
return x*x r = map(func, [, , , , ])
print(type(r))
r = list(r)
print(r)
输出结果:
<class 'map'>
[, , , , ]
可以看出,map让函数func作用于列表的每一项,使列表的每一项都被函数func执行一次,即列表的每一项都进行平方。其返回值是map类型。
reduce()
reduce函数必须接收两个参数,把一个函数作用在一个序列[x1, x2, x3, ...]上,然后再把结果继续和序列的下一个元素做累积计算。
from functools import reduce def fn(x, y):
return x * + y f = reduce(fn, [, , , , ]) # 把序列变为整数
print(f)
print(type(f))
输出结果:
<class 'int'>
和map不同,虽然reduce也是作用于每个元素,但是reduce的作用结果要用在下次和另一个元素做累积计算。
map()和reduce()的结合使用
from functools import reduce def fn(x, y):
return x * + y def char2num(s):
digits = {'': , '': , '': , '': , '': , '': , '': , '': , '': , '': }
return digits[s] f = reduce(fn, map(char2num, ''))
print(f)
输出结果:
可以将字符串类型转换为int类型
filter()
filter()函数用于过滤序列,接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def not_empty(s):
return s and s.strip() # 不能直接写s.strip() f = filter(not_empty, ['A', '', 'B', None, 'C', ' '])
print(type(f))
print(list(f))
输出结果:
<class 'filter'>
['A', 'B', 'C']
sorted()
sorted()函数也是一个高阶函数,在列表的学习中初步接触了sorted(),但其实它还可以接收一个key函数来实现自定义的排序。
key指定的函数将作用于被排序对象的每一个元素上,并根据key函数返回的结果进行排序。
l = sorted([, , -, , -], key=abs) # 按绝对值大小排序
print(l) s = sorted(['bob', 'about', 'Zoo', 'Credit']) # 按ASCII大小排序
print(s) sl = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) # 忽略大小写排序
print(sl) sr = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) # 反向排序
print(sr)
输出结果:
[, , -, -, ]
['Credit', 'Zoo', 'about', 'bob']
['about', 'bob', 'Credit', 'Zoo']
['Zoo', 'Credit', 'bob', 'about']
同样的,sorted()也可以对元组和字典进行排序
from operator import itemgetter # 需要使用operator模块
L = [('Bob', ), ('Adam', ), ('Bart', ), ('Lisa', )]
print(sorted(L, key=itemgetter()))
输出结果:
[('Adam', ), ('Bart', ), ('Bob', ), ('Lisa', )]
当然,也能以values的值来排序,对字典的排序与元组类似,但返回值不同。
from operator import itemgetter
dic = {"Bob": , "Adam": , "Lisa": }
print(sorted(dic,key=itemgetter()))
print(sorted(dic, key=itemgetter()))
输出结果:
['Adam', 'Bob', 'Lisa']
['Adam', 'Lisa', 'Bob']
可以看到,不管是以key值进行排序,还是以value值进行排序,排序结果只返回对应顺序的key值。
匿名函数
f = list(map(lambda x: x * x, [, , , , , , , , ]))
print(f)
输出结果:
[, , , , , , , , ]
上面就是一个匿名函数的使用,匿名函数 lambda x: x * x 实际上就是:
def f(x):
return x * x
只是在这里没有显式地定义函数,这样因为函数没有名字,不必担心函数名冲突,而且代码看起来也简洁。
python之高阶函数和匿名函数的更多相关文章
- Python中的高阶函数与匿名函数
Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...
- python 基础 4.3 高阶函数下和匿名函数
一 .匿名函数 顾名思议就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?lambda 函数就是一种快速定义单行的最小函数,可以用在任何需要函数的地方. 常规版: def fun(x,y ...
- python基础——高阶函数
python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...
- Python的高阶函数小结
一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...
- Scala 基础(十一):Scala 函数式编程(三)高级(一)偏函数、作为参数的函数、匿名函数、高阶函数
1 偏函数 1)在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 2)将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范围值的 ...
- python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
python函数式编程之返回函数 高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回. 函数作为返回值 def laxy_sum(*args): def sum(): ax = 0; fo ...
- python——内置函数和匿名函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...
- python(day16)内置函数,匿名函数
# add = lambda x,y:x+y # print(add(1,2)) # dic={'k1':10,'k2':100,'k3':30} # def func(key): # return ...
- python之内置函数,匿名函数
什么是内置函数? 就是Python给你提供的,拿来直接用的函数,比如print,input等等.其实就是我们在创建.py的时候python解释器所自动生成的内置的函数,就好比我们之前所学的作用空间 内 ...
- Python函数(七)-匿名函数
函数就是变量,定义一个函数就是把一个函数体赋值给一个函数名,函数和变量的回收机制也是一样的 匿名函数不需要指定函数名,只需要有函数体,然后把这个函数体赋给一个变量 Python中使用lambda来创建 ...
随机推荐
- EFCore+Mysql仓储层建设(分页、多字段排序、部分字段更新)
前沿 园子里已有挺多博文介绍了EFCore+Mysql/MSSql如何进行使用,但实际开发不会把EF层放在Web层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进 ...
- 洛谷 p2196 挖地雷 题解
好久没有写博客了,今天水几篇博客 传送门 挖地雷这个题之前在 信息学奥赛一本通 上做过几乎一样的题,但是由于数据太水导致我当时过了,进而导致我昨天(4.28)考试丢了20分,今天写一篇题解 这个挖 ...
- 微软开源大规模数据处理项目 Data Accelerator
微软开源了一个原为内部使用的大规模数据处理项目 Data Accelerator.自 2017 年开发以来,该项目已经大规模应用在各种微软产品工作管道上. 据微软官方开源博客介绍,Data Accel ...
- 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see https://conda.
[现象] 在命令行输入python出现“Warning:This Python interpreter is in a conda environment, but the environment h ...
- Jmeter函数助手
1.__Random:产生0-10之间的随机数[__RadomString:随机生成字符函数同__Random]
- [数据结构] 用C语言模拟一个简单的队列程序
#include<stdio.h> #include <stdlib.h> #include<string.h> #include<math.h> // ...
- Unity Rain Ai 插件基本使用(一)
1.下载安装Rain 插件 原先可以在unity的Asset Stroe 下载到,但是现在Rain 的开发公司因为人工智能的发展,公司得到投资,所以下架了rain插件. 所以我给出网盘链接 链接:ht ...
- DWM1000 帧过滤代码实现
帧过滤功能可以在同一个环境内组建多个网络而不干扰(非频段不同),可以通过PANID(网络ID)区分不同网络,不同网络中的模块无法直接通信, 再之,利用短地址,网络中可以同时有多个模块发送信息,而接收端 ...
- MFC实现红黑砖块
MFC实现红黑砖块 题目 老题目了,给定w,h长宽的图,上面有颜色不同的瓷砖,黑和红,问从给的起点出发,只能走黑色瓷砖,能走多少块,可视化输出过程 思路 咋一看搜索水题,但是要用可视化,要用模板类,, ...
- CP343-1 扩展ProfibusCPU 314C-2DP
1. MPI编程电缆连接PLC ,设置接口为PC Adapter MPI.1,如下图所示 2. 硬件组态插入组态,建立ethernet 网络,编译后下载 3.CP343-1安装上后,CPU run不起 ...