python—高阶函数
什么是内置高阶函数:
一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
Python中内置了几个常用的高阶函数,比如map( )函数、reduce( )函数、filter( )函数和sorted( )函数。
abs函数:
abs() 函数返回数字的绝对值。
>>> a = -1
>>> print(abs(a))
1
>>> print(abs(-15))
15
>>> f = abs
>>> print(f(-10))
10
函数本身也可以赋值给变量,变量可以指向函数:
def double(x):return 2*x # 定义一个函数,
f = double # 将函数赋值给变量
print(f(2)) # 通过变量可以调用函数
map函数
map()函数接收的是两个参数,一个函数,一个序列(列表),其功能是将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回。
1 . 对于一个序列[-1,3,-4,-5]的每一个元素求绝对值
li1 = [-1,3,-4,-5]
li2 = map(abs,li1) # 将abs 函数依次作用于序列了li1中的每一个元素,并将处理后的结果返回序列
print(list(li2))运行结果:
[1,3,4,5]
2 . 对于每个元素求阶乘
import random
def factoria(x):res = 1for i in range(1,x+1):res = res * ireturn res
li = [random.randint(2,7) for i in range(10)]
print(list(map(factoria,li)))
reduce函数
reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)
python2中:reduce是内置函数
python3中 from functools import reduce
from functools import reduce
#import functools
#functools.reduce()
def multi(x,y):return x*y
print(reduce(multi,range(1,5)))def add(x,y):return x+y
print(reduce(add,range(1,6)))运行结果:
24
15
filter函数
filter过滤函数
和map()类似的,也接收一个函数和一个序列
但是和map()不同的是,filter()把传入的函数依次作用于
每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素
def isodd(num):if num % 2 == 0:return Trueelse:return Falseprint(list(filter(isodd,range(100))))运行结果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90,
92, 94, 96, 98]
lambda匿名函数
lambda()匿名函数是指一类无需定义标识符(函数名)的函数或子程序。
lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
匿名函数的关键字为 lambda。
冒号前面是形参,冒号后面是返回值。
示例:分别打印元素的累加、平方、范围内的所有偶数
from functools import reduce
# def add(x,y):
# return x+y
# print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))
# def mypow(x):
# return x**2
print(list(map(lambda x:x**2,range(5))))
# def isood(num):
# return num%2 ==0
print(list(filter(lambda x:x%2==0,range(100))))运行结果:
45
[0, 1, 4, 9, 16]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60,
62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90,
92, 94, 96, 98]
sorted( )函数
sorted( )函数是用来对可迭代对象排序的,与列表的list( )函数不同,后者是在原位置上进行排序的,排序后原列表的元素顺序会发生改变,而前者是将排序后的结构生成到一个新的列表中。
a = [1,3,8,4,9,2,6]
a.sort()
print(a)
b = [9,3,6,8,2,7,4]
c = sorted(b)
print(b)
print(c)运行结果:
[1, 2, 3, 4, 6, 8, 9] a的原列表元素顺序发生改变
[9, 3, 6, 8, 2, 7, 4] b 列表顺序没有改变
[2, 3, 4, 6, 7, 8, 9] 新生成的列表中存放排序之后的元素
练习:
1 . 将一个字符串转换成整型 ‘332.31321’
from functools import reducedef str2int(s):def char2int(ch):c = {str(x): x for x in range(10)}return c[ch]def fun(n1, n2):return n1 * 10 + n2return reduce(fun, map(char2int, s))num = str2int('12345')
print(type(num), num)运行结果:
<class 'int'> 12345
2.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
def zz(x):return x.capitalize()
name = input('请输入英文名字:')
print(list(map(zz, name.split())))运行结果:
请输入英文名字:faker
['Faker']
3.利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456
from functools import reduce
def str2float(s):s1 = s.split('.')[0]s2 = s.split('.')[1][::-1]c2n = {str(i):i for i in range(1,10)}def number(x):return c2n[x]def before_c2n(x,y):return x*10+ydef after_c2n(x,y):return x*0.1+yreturn reduce(before_c2n,map(number,s1)) + 0.1*reduce(after_c2n,(map(number,s2)))
print(str2float('345.678'))运行结果:
345.678
4.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
def huishu(s):s = str(s)return s == s[::-1]
li = [123,23432,121,4567,12421]
print(list(filter(huishu,li)))运行结果:
[23432, 121, 12421]
python—高阶函数相关推荐
- 快速记忆python函数-【速学速记】Python 高阶函数
原标题:[速学速记]Python 高阶函数 前言: python 迅速发展壮大起来,多亏了人工智能,AI ,机器学习,深度学习的发展.所以小的给各位看官们准备了收藏已久的视频教程分享给大家!希望能带给 ...
- python高阶函数filter_python 高阶函数之filter
前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...
- python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)
一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...
- python高阶函数map_简单了解python高阶函数map/reduce
高阶函数map/reduce Python内建了map()和reduce()函数. 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每 ...
- python高阶函数(三分钟读懂)
python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...
- python高阶函数——sorted排序算法
python高阶函数--sorted排序算法 python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, ...
- Python高阶函数使用总结!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约2000字,建 ...
- python 高阶函数
高阶函数:将函数作为参数传入 #!/usr/bin/python def cal(x, y, func): return func(x) + func(y); print cal(-1, -3 ...
- python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...
一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...
- Python高阶函数(map,reduce,filter)
python内置常用高阶函数:. 称为 函数式编程,常常有一下特点 函数本身可以赋值给变量,赋值后变量为函数: 允许将函数本身作为参数传入另一个函数: 允许返回一个函数. 按常用排序 map() 函数 ...
最新文章
- 【练习】2021下半年数据结构刷题笔记和总结 (三)栈 队列 链表 枚举算法
- 线程放弃 java 1615477619
- Java中的Class类
- Gartner 发布2017 年商业智能和分析平台魔力象限 Tableau 获“领先者”
- 关于删库 恢复 (慎重使用,未亲测)
- IDEA 打包、Spring Boot Maven plugin 打包可执行 Jar 程序
- STL笔记 ( 迭代器 )
- linux 安装触摸版驱动程序,在ubuntu和linux上配置触摸屏驱动程序启用触摸屏
- xp计算机无法关机,xp系统不能关机解决方法【图文教程】
- 我和计算机专业的故事
- 安装ie9提示未能完成安装_win10系统安装iE提示“internet Explorer未能完成安装”的修复教程...
- Ubuntu18.04屏幕自动旋转解决方法
- 快手视频搬运快手视频伪原创工具快手视频消重快手去重的软件短视频消重批量处理软件,短视频伪原创...
- Jquery 回到顶部
- 特征空间之点检测(MATLAB)
- ModuleNotFoundError: No module named ‘django‘
- spring boot多数据源配置示例
- 大学生旅游网页制作作业5页 西柏坡介绍网页成品源代码下载 河北红色旅游景点网页设计
- python爬虫之正则表达式练习——爬取百度图片
- 41、生鲜电商平台-物流动态费率、免运费和固定运费设计与架构
热门文章
- linux获取bind返回值信息,v$sql_bind_capture 获取绑定变量信息
- android mqtt详解_Android mqtt入门 Android studio(转)
- php用到的mysql语句_PHP中常用到的一些MySQL语句_php
- mac wmware 无网络_无线网络中常用的技术名词
- 移动Web体验月报(6月):MIP 核心代码升级,增加基于 Vue 开发能力
- 教你如何把自己从好友的QQ中删除
- console 速查手册
- 前端错误日志收集方案
- 云时代 揭开性能监测战略的隐秘优势
- 多路复用与设置阻塞、非阻塞模式