高阶函数概念以及map/filter/reduce
什么样的函数叫高阶函数:map(func, *iterables) --> map object
条件:1.函数接受函数作为参数
2.函数的返回值中包含函数
num_l = [1,2,3,4,5,6]
b = map(lambda x:x**2,num_l)
print(b)
for i in b:
print(i)
>>> <map object at 0x0000023023782358> #返回map对象,是迭代器
1
4
9
16
25
36
num_l = [1,2,3,4,5,6]
def add_one(x):#也可以将lambda函数作为参数,等价于lambda x:x+1
return x+1
def reduce_one(x):
return x-1
def map_number(func,array):#传函数作为参数,将处理的功能封装
ret = []
for i in num_l:
res = func(i) #add_one或者reduce_one
ret.append(res)
return ret print(map_number(add_one,num_l))#map_number((lambda x:x+1),num_l) >>>[2, 3, 4, 5, 6, 7] 上述的代码其实就是map()函数!无意中完成了map内置函数!等价map((lambda x:x+1),num_l) 高阶函数之-filter filter(function or None, iterable) --> filter object
例子:
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi','sb_guoailun']
def filter_test(array):
ret = []
for i in array:
if not i.startswith('sb'):
ret.append(i)
return ret
res = filter_test(all_starts)
print(res)
>>>['kobe', 'kg', 'ai', 'jorden', 'jamse']
上面的例子可以看出,处理的逻辑还是通过for循环来实现的,但是如果处理的不是以sb开头怎么办?处理以XX为中间的怎么办?
所以此时处理的逻辑可以单独写成函数,就会很好用,如同上面的map函数,你给我处理逻辑的函数和要处理的可迭代对象,我就给你处理!
唯一的不同是此时的逻辑是判断bool,通过True或者False来过滤,除去函数逻辑中的元素,此时filter函数应运而生!而filter是保留
满足函数逻辑的元素!
all_starts = ['kobe','kg','ai','jorden','jamse','sb_zhouqi_sb','sb_guoailun_sb']
def sb_show(n):
return n.endswith('sb')
def filter_test(func,array):
ret = []
for i in array:
if not func(i):
ret.append(i)
return ret res = filter_test(sb_show,all_starts)
print(res)
无意中把filter函数构造出来了!说白了就是将可迭代对象array中的每个元素拿出来给前面的函数处理,处理结果是true的保留
处理结果是False的舍弃。
终极版本:ret = filter(lambda x:not x.startswith('sb'),array)
print(list(ret))
>>>['kobe', 'kg', 'ai', 'jorden', 'jamse'] 高阶函数之---reduce
from functools import reduce
高阶函数概念以及map/filter/reduce的更多相关文章
- python 高阶函数学习, map、reduce
一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数. 函数map(): map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Ite ...
- 【Python学习之六】高阶函数1(map、reduce、filter、sorted)
1.map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回.示例: >>> def ...
- 【Python学习之六】高阶函数2(map、reduce、filter、sorted)
3.filter filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素.相当于一 ...
- Python——高阶函数概念(Higher-order function)
1.变量可以指向函数 以内置的求绝对值abs()函数为例,: >>> abs(-12) 12 >>> abs <built-in function abs&g ...
- Python高阶函数map、reduce、filter、sorted的应用
#-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...
- JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- 高阶函数---swift中的泛型介绍(一步步实现Map函数)
说明 本文内容均出自函数式 Swift一书, 此处整理仅仅是为了自己日后方便查看, 需要深入研究的话, 可以点进去购买, 支持原作者 本书由 王巍–新浪微博大神翻译 OneV's Den 喵神博客 接 ...
- python六十课——高阶函数之map
1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...
- js高阶函数的理解
高阶函数:英文叫Higher-order function.JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数 ...
随机推荐
- C# Selenium操作指南,关闭黑色CMD窗口/禁用图片/隐藏浏览器等
引用部分:1. 2. 配置部分: ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(); dri ...
- 【转】WPF DataGridComboBoxColumn使用
若要填充下拉列表,请首先使用下列选项之一设置 ComboBox 的 ItemsSource 属性.静态资源. x:Static 代码实体.ComboBoxItem 类型的内联集合.实现效果如下: 如需 ...
- MySQL悲观
//0.开始事务 begin;/begin work;/start transaction; (三者选一就可以) //1.查询出商品信息 for update; //2.根据商品信息生成订单 inse ...
- 大数据 -- Hadoop集群环境搭建
首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...
- Linux——xargs命令学习
有时候我们会遇到需要将指定命令返回结果进行处理的情况 这种情况下,可能就需要写for循环之类的脚本进行处理了(目前我只能想到这种方法) 但是想起来还有一个xargs命令,组合这个命令就比较省事了. 场 ...
- Java分布式:分布式锁之Zookeeper
Java分布式:分布式锁之Zookeeper 分布式锁系列教程重点分享锁实现原理 引入ZooKeeper ZooKeeper是什么呢? ZooKeeper 是一个开源的分布式协调服务,它可以在分布式系 ...
- c#.net EF DB FIRST 添加新的模型
双击.edmx ,右键-从数据库更新模型,在“添加”里选择新表.
- Linux 就该这么学 CH04 VIM编辑器和Shell命令脚本
0 概述 1 Vim编辑器 在linux 中一切都是文件,而配置一个服务就是修改其配置文件的参数. vim 编辑器有三种模式:命令模式,末行模式和编辑模式. 命令模式:控制光标移动,对文件进行操作. ...
- Python中使用@的理解
Python函数中使用@ 稍提一下的基础 fun 和fun()的区别 以一段代码为例: def fun(): print('fun') return None a = fun() #fun函数并将返回 ...
- day02——while、字符串格式化、运算符、编码初识
day02 while--关键字(死循环) 格式:while 条件: 循环体 print(1) while True: print("痒") print("鸡你太美& ...