在上一讲里面, 我们确实是把那个什么匿名函数给彻底学会了的, 反正就是掌握了一种写法, 这个写着法, 就是用一行代码就能实现一些比较简单的逻辑事情的。然而, 不少人心中存有这样的疑问: 它在单独使用时出现的频率并不高, 那么, 它真正能够大展拳脚的领域究竟在什么地方呢?今天这节课就把谜底给大家揭开, 我们一次性地把那些最常用的三大高阶函数给全部学习完毕, 这其中的前两个大家看得到, 还有一个被省略掉了哦。它们在数据处理、数据分析、爬虫技术以及代码精简方面发挥着关键作用, 被视为核心的强力工具。这些工具必须和函数搭配在一起使用, 对于想要从零开始逐步提升技能的人来说, 这是一个必然要经历的并且非常关键的阶段。一、什么是高阶函数现在就来给大伙儿提供一个, 那种特别明白、而且能记得特清楚的, 一个定义。把接收函数当作是参数的这样一个函数存在了, 这种被称之为高阶函数。普通函数的参数类型可以是数字、字符串或者列表, 这些东西都可以作为它的输入。我们说的这种高阶函数, 它的参数位置是可以传进去一个函数的, 这个被传进来的函数呢, 既可以是大家自定义的那个函数, 也可以就是一个普通的函数。在这节课里面, 咱们说的这三个主要人物, 他们各自负责的活儿分得很清楚这里要牢牢记住它们最核心的那个用途。1. map: 批量转换数据改值、统一加工。2. 对数据进行批量性的筛除工作, 也就是将数据过滤掉, 只挑选符合具体条件的数值内容。3. 对数据进行批量聚合操作, 具体方式包括求和、求积以及合并成一个数。二、map() 这个函数, 它的作用是把所有的那些个数据呢, 统一地进行一种转换处理。1、核心作用需要对包括列表以及元组在内的那些可以被迭代访问的对象, 针对其内部的每一个单独的元素, 去执行同一种处理逻辑, 以此来达成批量的加工和转换的效果, 在这个过程中不包含任何筛选的动作, 也不会删除任何元素, 仅仅是为了改变数据本身的内容。2、标准语法map(函数, 可迭代对象)返回的结果是map迭代器类型的对象, 必须要调用一下list函数把它转换成列表之后, 大家才能看到具体的内容。3、零基础实操案例案例1: 配合使用内置函数, 也就是涉及到数据类型转换的情况。最常用的场景批量将字符串数字转为整数这是一份原始数据, 其内容为列表形式的字符串数字。1, 2, 3, 4, 5# 批量转为整数把map对象转换成了list, 里面的int参数是空的。print(res)# 输出1, 2, 3, 4, 5案例2, 这里所指的状况是去配合一个由使用者自行设定的运行规则。实现列表中的每一个数字, 都要对其进行翻倍的操作处理。1, 6, 8, 9, 10# 每个元素 *2 list(map( x: x*2, ))print()# 输出2, 12, 16, 18, 20案例3, 多列表同步处理的。这个名为map的功能, 是能够去同时执行对多个列表的遍历行为的, 并且它还会按照各自的索引位置来进行彼此的配对运算。a b 10, 20, 30把对应位置的那些数字拿来, 然后一个一个地加到一起。res list(map( x,y: xy, a, b))print(res)# 输出11, 22, 33三、() 函数批量筛选过滤数据1、核心作用根据已经给定的那些条件来进行判断, 然后只保留符合这些条件的元素, 把那些不符合条件的全部删除, 整个过程只是做一个筛选的动作, 而对数值本身不进行任何修改。2、标准语法这是一个用来做判断作用的函数, 它是一个可以被迭代的对象。函数返回 True 的时候, 保留元素, 返回 False 的时候, 剔除元素。3、零基础实操案例对所有的数据进行筛选, 然后从中挑出那些可以被2整除的数。1,2,3,4,5,6,7,8,9,10# 筛选偶数能被2整除 列表(( x: x被2整除并且等于0, ))。print()# 输出2, 4, 6, 8, 10这里是案例第2个, 这个任务的主要目的是为了筛选出数值比10还要大的那些数字。nums 5, 11, 3, 18, 7, 22结果等于把输入的数字作为索引, 把是否大于十的真假关系作为值。这样组成的一个列表结构进行最终的结果存放和处理。print(res)# 输出11, 18, 22案例3筛选非空字符串在日常做数据清洗这件事上, 那些使用频率比较高的常见方法。words 把“学生”这个词语, 再加上若干个空白的字符串数据, 以及一个叫做教程的内容部分, 还有那None这个值给整理在一起。res list(( x: x, words))print(res)# 输出学生, , 教程。四、通过调用这个函数, 可以将多个数据部分聚合在一起, 并且合并成一个整体的数据结果。1、这是非常重要的知识点, 对于新手朋友们来说, 是必须要记住的这些东西。这并非系统内部内置好的、能够被直接调用的功能, 而是需要使用者手动地将其所属的模块进行导入操作。from2、核心作用对序列里的元素按顺序做累计的运算, 目的是把好多数据变成唯一一个结果, 这种操作可以涉及求和、求积或者把累加部分做拼接。3、标准语法把运算函数, 还有那个可迭代对象, 这两个东西放在一起。4、这是零基础实操案例。案例1列表求和替代for循环累加from1,2,3,4,5# 两两累加最终得到总和total ( x,y: xy, )print(total)这个题目的正确答案应当是。运算逻辑拆解123 → 336 → 6410 → 10515第二个案例, 对列表里面的数据进行乘法运算求积。fromnums res ( x,y: x*y, nums)print(res)# 输出120在案例3当中, 把数字这个东西给拼接起来, 最后弄成了一个字符串。fromnums 结果是, 通过把字符串x和字符串y进行连接操作之后得到的新字符串, 再把它和数字列表nums这个元素一起组合起来。print(res)这次的情况是, 输出的结果数字为1234。五、对于这三个叫做高阶函数的概念, 它们之间有着根本性的、最终的决定性差别, 这个差别是非常明显的。很多新手容易混淆记住这句口诀1. map: 这是说每个人都分得一份, 把全部的东西都进行改变这个操作, 整体的数量是保持不变的, 只是每一个值变成了新的内容。2. 通过择优录取的方式进行筛选过滤, 使得数量变少, 但是值保持不变。3. 把全体人员进行合并处理, 将其浓缩转化为单一的个值, 也就是将原本存在的多个数值汇聚整合成最终确定的一个数值。六、高阶函数跟for循环到底有啥区别, 这是大家都很想弄明白的一个问题。这里出现了一个新手的疑问: 我既然可以通过使用 for 循环来完成相关任务, 那么为什么我还去学习这三个东西呢?1. 代码极简一行代码搞定几十行循环逻辑2. 这个句子的可读性是挺强的, 让人看第一眼的功夫就能弄明白, 它到底是在做数据转换, 还是在做信息筛选, 又或者是在搞聚合运算。3. 这是工作当中必须掌握的东西, 具体包括数据分析、爬虫技术、算法题目, 以及面试时的常见问题。4. 函数式编程标准写法七、本节课总结1. map这个操作, 主要就是为了把那个批量转换数据的任务给完成掉, 其核心用意在于对所有的那个元素进行统一的加工处理和修改。2. 把那些不符合条件的东西全部剔除掉, 最终只留下那些满足要求的元素, 完成这个批量筛选数据的操作。3. 先把批量聚合数据的情况给搞清楚, 然后把多个值合并成一个单值, 这时候呢, 是需要导入的。4. 这三大函数它们有着非常好的搭档关系, 而这个搭档就是匿名函数, 它在使用的时候显得非常极简而且高效。5. 返回值全部都是迭代器这种东西, 所以在日常进行使用的时候, 需要是用list()这个转换操作来进行查看。就是课后布置的那个作业, 也就是必须要完成的内容。1. 你可以使用map, 来对列表里面的所有数字进行平方运算。2. 通过使用的方法, 把那个列表里的内容进行筛选操作。这里有个数字序列, 它的具体含义并不明确。那些大于10的数字, 并且得是奇数。3. 使用计算列表10,20,30,40把全部的数值加起来, 最后算出来一个总数。
阅读完成 · 觉得有帮助?