python并发 map函数的妙用

1.map是什么?

map函数是Python中的一个内置函数,用于将一个函数应用到一个或多个可迭代对象的每个元素上,生成一个新的可迭代对象。它的一般形式是:

map(function, iterable1, iterable2, ...)

其中,function是一个函数或其他可调用对象,用于处理输入的元素;iterable1, iterable2, ... 是一个或多个可迭代对象,即待处理的数据。 

2.map函数的工作原理?

map函数的工作原理是,将传入的函数应用到每个可迭代对象对应位置的元素上,然后将结果作为一个新的可迭代对象返回。如果传入的可迭代对象的长度不一致,map函数会以最短的可迭代对象的长度为准,忽略掉多余的部分。

map函数返回的结果是一个迭代器(在Python 3中,map返回的是一个迭代器对象),因此如果需要查看结果,可以使用list()函数将其转换为列表。

下面是一个简单的示例,演示了如何使用map函数将一个列表中的每个元素都加1:

# 定义一个函数,用于将传入的数字加1
def add_one(x):return x + 1# 创建一个列表
numbers = [1, 2, 3, 4, 5]# 使用map函数将add_one函数应用到numbers列表的每个元素上
result = map(add_one, numbers)# 将结果转换为列表并打印
print(list(result))  # 输出为 [2, 3, 4, 5, 6]
3.map函数具体是怎么实现的呢?

map函数的实现通常是由Python解释器提供的,而且通常是使用C语言编写的,因此它的具体实现不是由Python代码完成的。

然而,可以简单地描述一下map函数的典型实现方式:

  1. map函数接收一个函数和一个或多个可迭代对象作为参数。

  2. 在内部,map函数会迭代最短的可迭代对象,对应位置上的元素传递给传入的函数进行处理。

  3. 对于每个元素,map函数都会将传入的函数应用到它上面,并将结果保存起来。

  4. 最后,map函数返回一个迭代器,该迭代器包含了所有经过处理后的元素。

考虑到map函数的灵活性和性能要求,Python解释器可能会对其进行优化和调整,以提高其效率和性能。因此,具体的map函数的实现可能会随着Python版本的更新和优化而发生变化。

4.重新实现一下简单的map函数 
class MapIterator:def __init__(self, func, *iterables):self.func = funcself.iterables = iterablesself.iterators = [iter(it) for it in iterables]def __iter__(self):return selfdef __next__(self):try:args = [next(it) for it in self.iterators]return self.func(*args)except StopIteration:raise StopIterationdef my_map(func, *iterables):return MapIterator(func, *iterables)# 测试
def add(x, y):return x + ynumbers = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]result = my_map(add, numbers, squares)for item in result:print(item)
5.性能对比(for与map)

 

 

for循环在处理同样的数据用时0.147

map在处理同样的数据用时0.144

 6.总结

map函数将数据序列转化为格式不同,大小相同的序列

map函数并不允许我们有条件地处理数据。它只是将一个函数应用于给定序列的每个元素。

map函数并不是用来替换条件while循环的。它是用来应用函数到序列的每个元素上的工具,而不是替代循环的机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Spring Security 简易速速上手小册》第8章 常见问题与解决方案(2024 最新版)

文章目录 8.1 异常处理和日志记录8.1.1 基础知识详解8.1.2 重点案例:统一异常处理案例 Demo拓展 8.1.3 拓展案例 1:日志记录策略案例 Demo拓展 8.1.4 拓展案例 2:日志聚合案例 Demo拓展 8.2 多租户安全性问题8.2.1 基础知识详解8.2.2 重点案例…

深入Kafka client

分区分配策略 客户端可以自定义分区分配策略, 当然也需要考虑分区消费之后的offset提交, 是否有冲突。 消费者协调器和组协调器 a. 消费者的不同分区策略, 消费者之间的负载均衡(新消费者加入或者存量消费者退出), 需要broker做必要的协调。 b. Kafka按照消费组管理消费者, …

VUE3:省市区联级选择器

一、实现效果 二、代码展示 <template><div class"page"><select v-model"property.province"><option v-for"item in provinces" :key"item">{{ item }}</option></select><select v-model&…

今日学习总结2024.3.2

最近的学习状态比较好&#xff0c;感觉非常享受知识进入脑子的过程&#xff0c;有点上头。 实验室一个星期唯一一天的假期周六&#xff0c;也就是今天&#xff0c;也完全不想放假出去玩啊&#xff0c;在实验室泡了一天。 很后悔之前胆小&#xff0c;没有提前投简历找实习&…

YOLOv9有效提点|加入MobileViT 、SK 、Double Attention Networks、CoTAttention等几十种注意力机制(五)

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、本文介绍 本文只有代码及注意力模块简介&#xff0c;YOLOv9中的添加教程&#xff1a;可以看这篇文章。 YOLOv9有效提点|加入SE、CBAM、ECA、SimA…

ETH网络中的区块链

回顾BTC网络的区块链系统 什么是区块链&#xff1f;BTC网络是如何运行的&#xff1f;BTC交易模式 - UXTO ETH网络中的区块链 ETH网络的基石依旧是 区块链。上面 什么是区块链&#xff1f; 的文章依旧适用。 相比BTC网络&#xff0c;ETH网络的账户系统就相对复杂&#xff0c;所…

实用工具:实时监控服务器CPU负载状态并邮件通知并启用开机自启

作用&#xff1a;在服务器CPU高负载时发送邮件通知 目录 一、功能代码 二、配置开机自启动该监控脚本 1&#xff0c;配置自启脚本 2&#xff0c;启动 三、功能测试 一、功能代码 功能&#xff1a;在CPU负载超过预设置的90%阈值时就发送邮件通知&#xff01;邮件内容显示…

js中Generator函数详解

定义&#xff1a; promise是为了解决回调地狱的难题出现的&#xff0c;那么 Generator 就是为了解决异步问题而出现的。 普通函数&#xff0c;如果调用它会立即执行完毕&#xff1b;Generator 函数&#xff0c;它可以暂停&#xff0c;不一定马上把函数体中的所有代码执行完毕…

Linux基本指令(下)

目录 1. less指令 2. head与tail指令 3. find指令 示例 4. grep指令 示例 ​编辑 5. zip/unzip 打包与压缩 示例 ​编辑 6. tar指令 7. find指令&#xff1a; -name 8. echo指令 9. 时间相关的指令 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff…

【机器学习】有监督学习算法之:K最近邻

K最近邻 1、引言2、决策树2.1 定义2.2 原理2.3 实现方式2.3.1 距离度量2.3.2 K值的选择 2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 这么长时间没更新了&#xff0c;是不是得抓紧时间了。 小鱼&#xff1a;最近可都是在忙的呢&#xff0c;…

线上历史馆藏系统 Java+SpringBoot+Vue+MySQL

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

day09_商品管理订单管理SpringTaskEcharts

文章目录 1 商品管理1.1 添加功能1.1.1 需求说明1.1.2 核心概念SPUSKU 1.1.3 加载品牌数据CategoryBrandControllerCategoryBrandServiceCategoryBrandMapperCategoryBrandMapper.xml 1.1.4 加载商品单元数据ProductUnitProductUnitControllerProductUnitServiceProductUnitMap…

数据结构与算法-冒泡排序

引言 在数据结构与算法的世界里&#xff0c;冒泡排序作为基础排序算法之一&#xff0c;以其直观易懂的原理和实现方式&#xff0c;为理解更复杂的数据处理逻辑提供了坚实的入门阶梯。尽管在实际应用中由于其效率问题不常被用于大规模数据的排序任务&#xff0c;但它对于每一位初…

【C++】set、multiset与map、multimap的使用

目录 一、关联式容器二、键值对三、树形结构的关联式容器3.1 set3.1.1 模板参数列表3.1.2 构造3.1.3 迭代器3.1.4 容量3.1.5 修改操作 3.2 multiset3.3 map3.3.1 模板参数列表3.3.2 构造3.3.3 迭代器3.3.4 容量3.3.5 修改操作3.3.6 operator[] 3.4 multimap 一、关联式容器 谈…

Hololens 2应用开发系列(1)——使用MRTK在Unity中设置混合现实场景并进行程序模拟

Hololens 2应用开发系列&#xff08;1&#xff09;——使用MRTK在Unity中进行程序模拟 一、前言二、创建和设置MR场景三、MRTK输入模拟的开启 一、前言 在前面的文章中&#xff0c;我介绍了Hololens 2开发环境搭建和项目生成部署等相关内容&#xff0c;使我们能生成一个简单Ho…

matlab 写入格式化文本文件

目录 一、save函数 二、fprintf函数 matlab 写入文本文件可以使用save和fprintf函数 save输出结果: fprintf输出结果: 1.23, 2.34, 3.45 4.56, 5.67, 6.78 7.89, 8.90, 9.01 可以看出fprintf输出结果更加人性化,符合要求,下面分别介绍。 一、save函数 …

MQL5-MT5连接上国内期货

主要原因是昨天在学习MACD时发现给的基础代码感觉不对&#xff0c;但无法证明&#xff0c;因为MT5接的都是外汇交易&#xff0c;数据和国内的文华啥的全对不上&#xff0c;便找了一些国内接CTP的&#xff0c;直接写代码有点麻烦&#xff0c;虽然之前对接过国内CTP的东西&#x…

AI入门笔记(三)

神经网络是如何工作的 神经网络又是如何工作的呢&#xff1f;我们用一个例子来解释。我们看下面这张图片&#xff0c;我们要识别出这些图片都是0并不难&#xff0c;要怎么交给计算机&#xff0c;让计算机和我们得出同样的结果&#xff1f;难点就在于模式识别的答案不标准&…

十二、Nacos源码系列:Nacos配置中心原理(四)- RefreshEvent 事件处理

前面文章&#xff0c;我们说到回调监听器的方法中&#xff0c;主要就是发布了一个RefreshEvent事件&#xff0c;这个事件主要由 SpringCloud 相关类来处理。今天我们继续分析后续的流程。 RefreshEvent 事件会由 RefreshEventListener 来处理&#xff0c;该 listener 含有一个 …

武器大师——操作符详解(下)

目录 六、单目操作符 七、逗号表达式 八、下标引用以及函数调用 8.1.下标引用 8.2.函数调用 九、结构体 9.1.结构体 9.1.1结构的声明 9.1.2结构体的定义和初始化 9.2.结构成员访问操作符 9.2.1直接访问 9.2.2间接访问 十、操作符的属性 10.1.优先性 10.2.结合性 …