6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器

第三周 Day 1

🎯 今日目标

  • 掌握 Python 中函数式编程的核心概念
  • 熟悉 map()、filter()、reduce() 等高阶函数
  • 结合 lambda 和 列表/字典 进行数据处理练习
  • 了解生成器与迭代器基础,初步掌握惰性计算概念

🧠 函数式编程基础

函数式编程是一种“将函数作为数据处理工具”的风格,强调表达式、不可变性和链式操作。

🛠 常用高阶函数

1️⃣ map(func, iterable):将函数应用于序列的每个元素

nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares)  # 输出 [1, 4, 9, 16]

2️⃣ filter(func, iterable):过滤序列中符合条件的元素

nums = [5, 8, 12, 3, 7]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even)  # 输出 [8, 12]

reduce(func, iterable):连续两两执行函数(需导入)

from functools import reducenums = [1, 2, 3, 4]
total = reduce(lambda x, y: x + y, nums)
print(total)  # 输出 10

🔁 生成器 Generator

生成器是一种惰性迭代器,只在需要时计算结果,节省内存。

def countdown(n):while n > 0:yield nn -= 1for i in countdown(5):print(i)

🔄 迭代器 Iterator

任何实现了 iter() 和 next() 方法的对象都可以被称为迭代器。

lst = iter([1, 2, 3])
print(next(lst))  # 输出 1
print(next(lst))  # 输出 2

🧪 今日练习任务

✅ 练习1:用 map 和 lambda 对列表每个数平方

nums = [2, 4, 6, 8]
result = list(map(lambda x: x**2, nums))
print(result)

✅ 练习2:用 filter 筛选出长度大于3的字符串

words = ['hi', 'hello', 'python', 'no']
filtered = list(filter(lambda w: len(w) > 3, words))
print(filtered)

✅ 练习3:实现一个生成器,生成前 N 个偶数

def even_gen(n):for i in range(n):yield i * 2print(list(even_gen(5)))  # 输出 [0, 2, 4, 6, 8]

📌 今日总结

内容说明
函数式编程入门高阶函数 map/filter/reduce
惰性计算生成器节省内存,适合大数据处理
迭代器基础掌握 iter() 和 next()
实战练习提升数据处理与简洁表达能力

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

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

相关文章

SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则

目录 一、前言二、版本选择和适配 2.1、本文使用各组件版本2.2、官方推荐版本 三、部署sentinel-dashboard 3.1、下载 sentinel-dashboard jar包3.2、启动 sentinel-dashboard 四、Gateway 集成 Sentinel实现控制台配置流控规则测试 4.1、添加Gateway 集成 Sentinel 包4.2、添加…

Linux八股【1】-----虚拟内存

参考:小林coding 虚拟内存存在的目的? 为了能够同时运行多个进程同时进程之间互不干扰 虚拟地址通过MMU找到物理地址 物理内存怎么映射的? 物理内存的映射方法主要有两种,内存分段和内存分页 内存分段 把程序的不同区&#…

惊艳呈现:探索数据可视化的艺术与科学

一张图表真能胜过千言万语?当超市销售数据变成跳动的热力图,当城市交通拥堵状况化作流动的光带,数据可视化正以超乎想象的方式重塑我们认知世界的维度。但你是否想过,那些看似精美直观的图表背后,藏着怎样精密的科学逻…

06-排序

排序 1. 排序的概念及其应用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键…

从失效文档到知识资产:Gitee Wiki 引领研发知识管理变革

在关键领域软件研发的复杂生态中,知识管理正成为制约行业发展的关键瓶颈。随着软件系统规模不断扩大、技术栈日益复杂,传统文档管理模式已难以满足现代软件工厂对知识沉淀、共享和传承的需求。Gitee Wiki作为新一代知识管理平台,通过技术创新…

MySQL 性能调优入门 - 慢查询分析与索引优化基础

MySQL 性能调优入门 - 慢查询分析与索引优化基础 性能问题诊断的通用思路 当数据库出现性能问题时,切忌盲目猜测或随意调整参数。一个科学的诊断流程通常包括: 基于数据,而非猜测 (Data-Driven, Not Guesswork):利用我们在上一篇讨论的性能监控指标和建立的基线。查看哪些…

8天Python从入门到精通【itheima】-73~74(数据容器“集合”+案例练习)

目录 73节-集合的基础定义和操作 1.学习目标 2.为什么要用集合 3.集合的定义 4.关于集合的常用操作 【1】添加新元素:add方法 【2】移除元素:remove方法 【3】随机取出元素:pop方法 【4】清空集合:clear方法 【5】取出两…

国芯思辰| AD7894的优质替代方案:SC1424模数转换器在分布式控制系统中的应用优势

分布式控制系统将控制任务分散至多个节点,各节点协同工作以实现复杂的控制目标。在这一架构下,系统ADC提出了严苛要求。高精度是精准采集各类模拟信号(如传感器输出的电压、电流信号)的基础,关乎控制决策的准确性&…

Unity基础-数学向量

Unity基础-数学向量 二、向量相关用法 概述 向量在Unity游戏开发中扮演着重要角色,用于表示位置、方向、速度等。Unity提供了Vector2、Vector3等结构体来处理向量运算。 1. 向量基础操作 1.1 向量创建和访问 // 创建向量 Vector3 position new Vector3(1, 2,…

Neo4j 数据建模:原理、技术与实践指南

Neo4j 作为领先的图数据库,其核心优势在于利用图结构直观地表达和高效地查询复杂关系。其数据建模理念与传统关系型数据库截然不同,专注于实体(节点)及其连接(关系)。以下基于官方文档,系统阐述其建模原理、关键技术、实用技巧及最佳实践: 一、 核心原理:以关系为中心…

volka 25个短语动词

以下是分句分段后的内容: 3,000. Thats 95% of spoken English. And I am teaching you all of these words. First, Ill teach you todays words. And then youll hear them in real conversations. With my brother. Stick around until the end, because witho…

服务器中日志分析的作用都有哪些

服务器日志是用来检测和排查可疑行为的主要工具,运维团队可以通过分析和解读日志文件,发现服务器中潜在的网络安全威胁或异常活动,下面,就让小编和大家一起来了解一下服务器中日志分析的作用都有什么吧! 对于服务器中的…

嵌入式硬件篇---龙芯2k1000串口

针对串口错误 “device reports readiness to read but returned no data (Device disconnected or multiple access on port?)” 的排查和解决方法 硬件方面 检查连接 确认串口设备(如串口线、连接的模块等)与龙芯设备之间的物理连接是否牢固,没有松动、脱落情况。尝试重新…

基于langchain的简单RAG的实现

闲来无事,想研究一下RAG的实现流程,看网上用langchain的比较多,我自己在下面也跑了跑,代码很简单,以次博客记录一下,方便回顾 langchain LangChain 是一个基于大型语言模型(LLM)开发…

视频监控平台建设方案

第三方视频监控平台是整合视频监控、门禁、报警等多业务的安防软件系统,具备兼容性、开放性、多业务整合和多级联网能力。其核心价值在于兼容友商编解码设备(如 IPC、DVR)、整合第三方子系统(如报警联动)、支持多级多域架构(适应平安城市等大规模场景)及提供集中存储方案…

天机学堂(学习计划和进度)

经过前面的努力,我们已经完成了《我的课程表》相关的功能的基础部分,不过还有功能实现的并不完善。还记得昨天给大家的练习题吗?《查询我正在学习的课程》,在原型图中有这样的一个需求: 我们需要在查询结果中返回已学习…

软件项目管理(3) 软件项目任务分解

一、相关概念 1.任务分解的方法和步骤 (1)方法 模板参照方法:参照有标准或半标准的任分解结构图类比方法:任务分解结构图经常被重复使用,具有相似性自顶向下方法:一般->特殊,演绎推理从大…

Vite 双引擎架构 —— Esbuild 概念篇

Vite 底层采用 双引擎架构,核心构建引擎是 Esbuild 和 Rollup,二者在开发和生产环境中分工协作,共同实现高性能构建。不可否认,作为 Vite 的双引擎之一,Esbuild 在很多关键的构建阶段(如依赖预编译、TS 语法转译、代码…

leetcode hot100 链表(二)

书接上回: leetcode hot100 链表(一)-CSDN博客 8.删除链表的倒数第N个结点 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* currhead;int len0;while(curr){currcurr->next;len;}int poslen-n…

Compose Multiplatform 实现自定义的系统托盘,解决托盘乱码问题

Compose Multiplatform是 JetBrains 开发的声明式 UI 框架,可让您为 Android、iOS、桌面和 Web 开发共享 UI。将 Compose Multiplatform 集成到您的 Kotlin Multiplatform 项目中,即可更快地交付您的应用和功能,而无需维护多个 UI 实现。 在…