专栏首页小一的数据分析之路Python入门高阶教程-高阶函数
原创

Python入门高阶教程-高阶函数

2020,做一个无可替代的人!

写在前面的话

前面写的 Python 入门教程中只有基础入门和基础进阶两部分,可以在公众号下拉菜单中找到,小一我都已经分好类了。

文章首发:公众号『知秋小梦』

做数据分析的话,我觉得高阶部分的内容你一节都不要错过,这部分内容算是数据预处理的核心了。

我也将会从高阶函数的使用NumPySciPyPandas 以及可能会用到的 Scikit-learn 几个部分开始。

你可能现在还不懂这些基础包是干什么的,这不重要,我会在干货内容中插入一些我踩过坑的小项目,回过头你再来品一下文章,想必收获会非常大。

正文

Lambda 函数

准确的说,Lambda 函数并不能称为高阶函数。但是在实际项目的开发过程中,Lambda 函数使用的相当频繁,并且效率也相当高,所以,一起来看看吧!

Lambda 函数又称为 Python 的匿名函数,一次性函数。

Lambda函数是使用 lambda 运算符创建的,可以包含任意多的参数,但它只有一个表达式。其语法如下:

lambda参数:表达式

例如:计算一个数的平方

# 通过 lambda 表达式计算一个数的平方
result = lambda x: x*x
print(result(5))

例如:计算两个数相乘

# 通过 lambda 表达式计算两个数相乘
result = lambda x, y: x*y
print(result(2, 5))

可能大家都明白 lambda 函数怎么用了吧。

相比起普通函数,为什么 lambda 表达式会更简单方便呢,我再举个例子:

# 输出10以内每个数乘以2:
# 定义函数
def new_func(number):
	return number*2

# 一般函数写法
result_number = [new_func(number) for number in range(10)]
print(result_number)

# lambda 函数写法
result_number = list(map(lambda x: x*2, [number for number in range(10)]))
print(result_number)

# 输出结果
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

可以看到,同样的结果,使用 lambda 的方式会更简单些。

这里在 lambda 表达式中使用了高阶函数 map,后面也会介绍到,往下看

map 函数

说到map,我首先想到的是 Java 中的 map 数据类型,Map<K,V>一种键值对的存储方式。

其次想到的是 reduce,map-reduce,Hadoop早期的一种大数据处理方式。

放一张 Google MapReduce 的中文版摘要,大家细品

文章首发:公众号『知秋小梦』

map 函数是 Python 的内建函数,可以直接使用。

map() 函数接接收两个参数,一个是 函数,一个是 可迭代对象 Iterable。

map将传入的函数依次作用到每个Iterable 上,并把结果作为新的 Iterator 返回

别慌,上面一段话你可能云里雾里,我举个例子你在品

举例:有一个函数f(x)=x*2,要把这个函数作用在list 0, 1, 2, 3, 4, 5, 6, 7, 8, 9上

熟不熟悉?这不就是上面 lambda 中的例子吗?

其中,0-9数据集合是可迭代对象, f(x)=x*2作为我们的 lambda 函数,返回的新数据集是 Iterator

再来个例子,将刚才的 list 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 全部转换为字符

# 将[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 全部转换为字符
list(map(str, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))

# 输出
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

看懂了吧,map() 就是一个映射函数,会根据提供的函数对指定序列做映射,映射的结果可以进行相应的类型转换

reduce 函数

再来看 reduce 函数,reduce 函数也是 Python 的内建函数,可以直接使用。

reduce() 函数接收和 map 同样的两个参数,不同的是 reduce 把上一次的结果继续和序列的下一个元素做累积计算

直接看例子:

# 猜猜这是在干嘛?
reduce(lambda x,y: x+y, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 输出
45

你可能猜到了,做累加,对,没错!0~9数字的累加和,结果是45

reduce 函数的效果可以这样表示

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

再来张图,别说你还看不懂:

文章首发:公众号『知秋小梦』

reduce() 是累积运算函数,会根据提供的运算函数对迭代类型参数中的元素进行累积运算

filter 函数

filter 的中文翻译是过滤,filter 函数也是 Python 的内建函数,可以直接使用。

filter() 函数同样接收两个参数:一个函数和一个序列。

filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 或者 False 决定保留还是丢弃该元素

这个介绍应该都能看懂,就把 filter 想象成一个过滤器。

看个例子:对于 list 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 输出其中的偶数

# 输出所有的偶数
list(filter(lambda x:x%2==0, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

# 输出
[2, 4, 6, 8]

很简单,filter() 是过滤函数,会根据提供的过滤函数对迭代类型参数中的元素进行过滤,保留使运算函数返回 true 的元素。

sorted 函数

sorted 函数也如它的中文意思一样,可以对所有可迭代的对象进行排序操作。

看一下sorted 的语法 :

sorted(iterable, cmp=None, key=None, reverse=False)
  • iterable :表示一个可迭代对象
  • cmp:比较的函数,比较可迭代对象中的两个对象
  • key:要来比较的元素
  • reverse:排序规则。reverse = True 降序 , reverse = False 升序(默认)

举例1:将2, 5, 7, 8, 1, -1从大到小排列

sorted([2, 5, 7, 8, 1, -1], reverse=True)

# 输出
[8, 7, 5, 2, 1, -1]

举例2:将 ('b',2),('a',1),('c',3),('d',4) 比较每个元组的第一位数进行排序

list_number = [('b', 2), ('a', 1), ('c', 3), ('d', 4)]
sorted(list_number, key=lambda x: x[0])

# 输出
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

可以看到,sorted 函数支持的排序更加的广泛。

这里不要将 sort 和 sorted 搞混了,sort 函数用于对列表进行排序,而 sorted 函数支持对所有可迭代对象进行排序

总结一下:

今天介绍了 Python 的一些高阶函数,而且是最常用的一些。

  • lambda 函数:匿名函数,搭配下面几个函数有意想不到的效果
  • map 函数:对迭代类型参数中的元素做映射操作
  • reduce 函数:对迭代类型参数中的元素进行累积运算
  • filter 函数:对迭代类型参数中的元素进行过滤
  • sorted 函数:对所有可迭代的对象进行排序操作

写在后面的话

春节期间在家里就开始准备了高阶部分的内容,确实不好写。

在写的时候得想想之前自己都踩过的哪些坑,自己是怎么认识并使用这些高阶技巧的,所以到现在我也只写了一小丢丢内容。(熬夜多了脑袋记不住事啊)

就拿今天的几个高阶函数来说,我刚开始接触的时候不知道这些函数这么有用,甚至都不知道这些函数,并不重视,等到自己造完轮子之后才发现是在做无用功。

2019年公众号的文章进度是在爬虫这一部分,还有爬虫框架没有介绍,干货内容也不多了,后面应该会多一些实战的爬虫项目。

但是,我在爬虫刚开始的时候就说过,数据分析的重点不是爬虫,是在数据处理这一块,大家最好能分清重点,以后就不再多说了。

碎碎念一下

2020年的第一篇干货文章,我需要你们的支持!关注点赞噢! 方便以后的高阶文章你们不会错过,建议直接关注公众号知秋小梦!!!

原创不易,欢迎点赞噢

文章首发:公众号【知秋小梦】

文章同步:掘金,简书

原文链接: Python入门高阶教程-高阶函数

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python入门基础教程-函数

    即:print个函数中有若干个具有默认值的参数,即便我们在调用这个函数的时候,就算没有指定它们,它们也存在于此。

    知秋小一
  • Python入门进阶教程-多线程与多进程

    如何同时对一个文件夹开启四个任务同时处理不同的任务,而不会产生冲突?接下来我们一起了解一下多线程和多进程。

    知秋小一
  • 《Hello NumPy》系列-数据类型与创建

    NumPy(Numerical Python 的简称)是高性能科学计算和数据分析的基础包,是 SciPy、Pandas 等数据科学的基础库,它所提供的数据结构比...

    知秋小一
  • Python之函数编程(1)

    第一次接触到这个知识点的时候,我还不是特别适应,内置的函数怎么可以用一个变量来代替?但是python确实是这么做的,这也不妨碍它的顺利执行。举个例子说明...

    AsiaYe
  • Python之函数编程(2)

    在上面的命令中,我们定义一个return_sum()的函数,这个函数返回一个sum的函数,sum函数的作用是求一个可迭代对象的所有元素的和,当我们直接调...

    AsiaYe
  • 0基础学习C语言第六章:函数

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

    诸葛青云
  • Kotlin学习之高阶函数和Lambda表达式的基础用法

    Kotlin学习之高阶函数和Lambda表达式的基础用法 一、定义和调用高阶函数的写法 kotlin.collections._Arrays.kt中的mapTo...

    企鹅号小编
  • 机器学习中的数学:为什么对数如此重要

    当然,如果你是一个忙碌的人,没有时间去健身房,把楼梯当作是有氧运动的简易版,那么走楼梯会更好。但是除此之外,你更可能选择乘电梯。

    deephub
  • [高大上的DL] Activation function (激活函数)的初步认识

    今天简单认识一下什么激活函数以及都有那些激活函数。说到激活函数这里有几个比较容易混淆的概念,比如Pooling池化和Sampling采样,loss functi...

    用户1622570
  • 如何学python 第10课 创建自己的函数

    在上一节课里,我们学习了一些关于错误检测和错误处理的知识。这节课我们来学习函数。我们将会介绍什么是函数,以及如何创建函数。 函数是什么? 函数是一系列指令的集合...

    用户1631416

扫码关注云+社区

领取腾讯云代金券