龙空技术网

Python核心技术——高阶函数:map函数(下)

小码农和农夫 1040

前言:

而今大家对“python的map函数”可能比较重视,你们都想要分析一些“python的map函数”的相关文章。那么小编也在网摘上汇集了一些关于“python的map函数””的相关资讯,希望小伙伴们能喜欢,你们一起来学习一下吧!

我们已经学习了map函数的定义和基本用法,我们来看看map如何自定义与性能对比吧!

自定义map函数

map函数可以接收多个可迭代对象,如果只考虑列表和元组,那么实现这个函数就比较简单,因为他们都有索引,但如果加上集合,事情就变得有些麻烦,集合是没有索引概念的,我先来实现一个只考虑可迭代对象为列表或元组的情况

在my_map函数内部,先获得所传入的可迭代对象的最小长度,利用for循环,每次从所传入的可迭代对象里各自获取一个元素,组装成列表。

关键问题:可迭代对象是如何传入到函数中,tmp是一个列表,在函数调用时,tmp前面加上星号,这是一个解包的过程,列表里的数据会像平时调用函数那样依次传入函数中。

如果考虑可迭代对象是集合的情况,由于集合没有索引,因此无法通过索引来获取数据,为了解决获取数据,可以使用next函数。

iter函数作用于可迭代对象,返回一个迭代器,next方法可以从迭代器里获取获取数据,这也是for循环内部的真实操作,当迭代器被迭代到末尾时,再次使用next方法将引发异常,for循环就是根据这个异常来终止循环的。

性能比较

我们可以以 map() 函数为例,看一下 Python 提供的函数式编程接口的性能。还是同样的列表例子,它还可以用 for 循环和 list 实现,我们来比较一下它们的速度:

你可以看到,map() 是最快的。因为 map() 函数直接由 C 语言写的,运行时不需要通过 Python 解释器间接调用,并且内部做了诸多优化,所以运行速度最快。

标签: #python的map函数