python高级编程一(生成器与高级编程)
@TOC
生成器
生成器使用
通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包
含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占
⽤的空间都⽩⽩浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推
算出后续的元素呢?这样就不必创建完整的list,从⽽节省⼤量的空间。在Python中,这种⼀边循环⼀边计算的机
制,称为⽣成器:generator。
创建生成器,列表生成式,我们知道,只要将最外一层的中括号,改为小括号,⽣成器保存的是算法,每次调⽤ next(g) ,就计算出 g 的下⼀个元素的值,直到计算到最后⼀个元素,没有更多的元素时,抛出 StopIteration 的异常。当然,这种不断调⽤ next() 实在是太繁琐了,虽然是点一次出现一次,但正确的⽅法是使⽤ for 循环,因为⽣成器也是可迭代对象。所以,我们创建了⼀个⽣成器后,基本上永远不会调⽤next() ,⽽是通过 for 循环来迭代它,并且不需要关心StopIteration 异常。
list1 = [x for x in range(1,10)]
print(list1)
# 如何不让内存溢出 引入生成器(按照一个生成式来创建元素)
g = (x for x in range(1,10))
print(g)
print(next(g))

通过函数来创建生成器(yield)
通过斐波那契数列来实现
普通实现:
def test1(times):#初始化a,b=0,1n=0while n<times:print(b) # yield b #yield用于创建一个生成器,工作返回后面变量值给生成器a,b=b,(a+b)n+=1return "done"print(test1(6))
生成器方式实现:
#引出生成器:对象,保存了产生元素的算法,同时会记录游标的位置
# 创建一个生成器: 1、通过列表生成式来创建
# 2、通过函数来创建生成器(yield)
# 遍历生成器中元素内容:
# 1、通过next(g) ,当已经遍历到生成器的结尾抛异常 :StopIteration
# 2、通过for来遍历
# 3、object内置的__next__ :当已经遍历到生成器的结尾抛异常 :StopIteration
# 4、send 函数 ,但是生成器的第一个值必须使用send(None),后面的值就没有限制(不推荐使用)
def test2():#初始化a,b=0,1while True:temp = yield b #yield用于创建一个生成器,工作返回后面变量值给生成器,无返回值a,b=b,a+bprint(temp)
g4 =test2()
print(g4)
print(next(g4))
print(next(g4))
print(next(g4))print(g4.send(None))
print(g4.send(''))
print(g4.send(''))
print(g4.send(''))
print(g4.send(''))
⽣成器是这样⼀个函数,它记住上⼀次返回时在函数体中的位置。对⽣成器函数的第⼆次(或第 n 次)调⽤跳转⾄
该函数中间,⽽上次调⽤的所有局部变量都保持不变。⽣成器不仅“记住”了它数据状态;⽣成器还“记住”了它在流
控制构造(在命令式编程中,这种构造不只是数据值)中的位置。⽣成器的特点:
- 节约内存
- 迭代到下⼀次的调⽤时,所使⽤的参数都是第⼀次所保留下的,在整个所有函数调⽤的参数都是第⼀次所调⽤时保
留的,⽽不是新创建的
迭代器
迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始
访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
我们已经知道,可以直接作用于 for 循环的数据类型有以下几种:
一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
一类是 generator ,包括生成器和带 yield 的generator function。
这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。
那我们怎么判断一组数据或是一组数据对象是不是 Iterable 对象尼?
可以使⽤ isinstance() 判断⼀个对象是否是 Iterable 对象
from collections.abc import Iterable
# Iterable:可迭代对象,能够通过for循环来遍历
a=(1,)
b=[1,2]
c={}
def test1(args):if isinstance(args,Iterable):print("args是可迭代对象")else:print('args对象不是可迭代对象')
test1(a)
test1(b)
test1(c)
test1(10)
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器
def test2(arg):if isinstance(arg, Iterator):print("args是迭代器")else:print('args对象不是迭代器')
test2(a)
test2(b)
test2(c)
test2(x for x in 相关文章:
python高级编程一(生成器与高级编程)
@TOC 生成器 生成器使用 通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占 ⽤的空间都⽩⽩浪费了。所以,如果…...
Go 字符串四种拼接方式的性能对比
简介 使用完整的基准测试代码文件,可以直接运行来比较四种字符串拼接方法的性能。 for 索引 的方式 for range 的方式 strings.Join 的方式 strings.Builder 的方式 写一个基准测试文件 echo_bench_test.go package mainimport ("os""stri…...
windows安装fastbev环境时,安装mmdetection3d出现的问题总结
出现的问题如下: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\include\crt/host_config.h(160): fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2019 (inclusive) are supporte…...
单片机Day05---动态数码管显示01234567
一、原理图 数组索引段码值二进制显示内容00x3f0011 1111010x060000 0110120x5b0101 1011230x4f0100 1111340x660110 0110450x6d0110 1101560x7d0111 1101670x070000 0111780x7f0111 1111890x6f0110 11119100x770111 0111A110x7c0111 1100B120x390011 1001C130x5e0101 1110D140…...
【Python3教程】Python3基础篇之数据结构
博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
muduo库源码分析: One Loop Per Thread
One Loop Per Thread的含义就是,一个EventLoop和一个线程唯一绑定,和这个EventLoop有关的,被这个EventLoop管辖的一切操作都必须在这个EventLoop绑定线程中执行 1.在MainEventLoop中,负责新连接建立的操作都要在MainEventLoop线程…...
使用Python解决Logistic方程
引言 在数学和计算机科学中,Logistic 方程是描述人口增长、传播过程等现象的一种常见模型。它通常用于表示一种有限资源下的增长过程,比如动物种群、疾病传播等。本文将带领大家通过 Python 实现 Logistic 方程的求解,帮助你更好地理解这一经典数学模型。 1.什么是 Logist…...
AI Agent工程师认证-学习笔记(3)——【多Agent】MetaGPT
学习链接:【多Agent】MetaGPT学习教程 源代码链接(觉得很好,star一下):GitHub - 基于MetaGPT的多智能体入门与开发教程 MetaGPT链接:GitHub - MetaGPT 前期准备 1、获取MetaGPT (1)使用pip获取MetaGPT pip install metagpt==0.6.6#或者在国内加速安装镜像 #pip in…...
MCP结合高德地图完成配置
文章目录 1.MCP到底是什么2.cursor配置2.1配置之后的效果2.2如何进行正确的配置2.3高德地图获取key2.4选择匹配的模型 1.MCP到底是什么 作为学生,我们应该如何认识MCP?最近看到了好多跟MCP相关的文章,我觉得我们不应该盲目的追求热点的技术&…...
重读《人件》Peopleware -(5)Ⅰ管理人力资源Ⅳ-质量—若时间允许
20世纪的心理学理论认为,人类的性格主要由少数几个基本本能所主导:生存、自尊、繁衍、领地等。这些本能直接嵌入大脑的“固件”中。我们可以在没有强烈情感的情况下理智地考虑这些本能(就像你现在正在做的那样),但当我…...
文献总结:AAAI2025-UniV2X-End-to-end autonomous driving through V2X cooperation
UniV2X 一、文章基本信息二、文章背景三、UniV2X框架1. 车路协同自动驾驶问题定义2. 稀疏-密集混合形态数据3. 交叉视图数据融合(智能体融合)4. 交叉视图数据融合(车道融合)5. 交叉视图数据融合(占用融合)6…...
制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)
AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…...
如何查询node inode上限是多少?
在 Linux 系统中,inode 上限由文件系统的类型和格式化时的参数决定。不同文件系统(如 ext4、XFS)有不同的查询方法。以下是详细操作步骤: 1. 确认文件系统类型 首先确定目标磁盘分区的文件系统类型(如 ext4、XFS&…...
Redis核心功能实现
前言 学习是个输入的过程,在进行输入之后再进行一些输出,比如写写文章,笔记,或者做一些技术串讲,虽然需要花费不少时间,但是好处很多,首先是能通过输出给自己的输入带来一些动力,然…...
驱动学习专栏--字符设备驱动篇--1_chrdevbase
字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC 、 SPI , LCD 等等都是字符设备&…...
Python及C++中的列表
一、Python中的列表(List) Python的列表是动态数组,内置于语言中,功能强大且易用,非常适合算法竞赛。 1. 基本概念 定义:列表是一个有序、可变的序列,可以存储任意类型的元素(整数…...
Oracle DROP、TRUNCATE 和 DELETE 原理
在 Oracle 11g 中,DROP、TRUNCATE 和 DELETE 是三种不同的数据清理操作,它们的底层原理和适用场景有显著差异 1. DELETE 的原理 类型:DML(数据操作语言) 功能:逐行删除表中符合条件的数据,保留…...
ida 使用记录
文章目录 伪代码-汇编hexstring快捷键 伪代码-汇编 流程图界面——F5——伪代码界面——再点Tab——流程图界面——再按空格——汇编界面流程图界面——空格——汇编界面 hex view - open subviews - hex dump string view - open subviews - string快捷键: sh…...
【连载3】基础智能体的进展与挑战综述
基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 2. 认知 人类认知是一种复杂的信息处理系统,它通过多个专门的神经回路协调运行…...
MacOs java环境配置+maven环境配置踩坑实录
oracl官网下载jdk 1.8的安装包 注意可能需要注册!!! 下载链接:下载地址点击 注意晚上就不要下载了 报错400 !!! 1.点击安装嘛 2.配置环境变量 export JAVA_HOME/Library/Java/Java…...
【Git】--- 企业级开发流程
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Git 本篇博客我们讲解Git在企业开发中的整体流程,理解Git在实际企业开发中的高效设计。 🏠 企业级开发流程 一个软件从零开始到最…...
SAP系统客户可回收包材库存管理
问题:客户可回收包材库存管理 现象:回收瓶无库存管理,在库数量以及在客户的库存数量没有统计,管理混乱。 解决方法: 客户可回收包装材料在SAP有标准的解决方案,在集团尚未启用该业务,首先…...
蓝桥杯嵌入式历年省赛客观题
一.第十五届客观题 第十四届省赛 十三届 十二届...
JDK的卸载与安装
卸载JDK 删除java的1安装目录 卸载JAVA_HOME 删除path下关于java的路径 java -version查看 安装JDK 百度搜索JDK,找到下载地址 同意协议 下载电脑对应版本 双击安装 记住安装路径 配置环境变量 我的电脑–>右键–>属性–>高级系统设置 环境变…...
八股系列(分布式与微服务)持续更新!
八股系列(分布式与微服务) 分布式系统的概念 分布式系统是由多个节点组成,节点之间通过网络协议传递数据,对外表现为一个统一的整体,一个节点可以是一台机器或一个进程;分布式系统的核心功能 资源共享&…...
【源码】Mybatis源码
引言 MyBatis 作为 Java 开发中广泛使用的持久层框架,其高效且灵活的数据库操作能力备受开发者青睐。在日常开发中,我们熟练运用 MyBatis 的各种功能来实现数据持久化,但深入探究其源码,能让我们更透彻地理解它的工作原理&#…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
LabVIEW驱动开发的解决思路
在科研项目中,常面临将其他语言开发的定制采集设备驱动转换为 LabVIEW 适用形式的难题。特别是当原驱动支持匮乏、开发人员技术支持不足时,如何抉择解决路径成为关键。以下提供具体解决思路,助力高效解决问题。 一、评估现有驱动死磕的可…...
[英语] abominable、detestable、despicable、odious、contemptible的区别
关于 abominable 与其他近义词的辨析 abominable 的核心含义是“因极端恶劣或违背道德而令人憎恶”,其情感强度较高,常带有道德批判意味。以下是其与常见近义词的区别及典型用法: 1. abominable vs. detestable abominable:强调…...
七、Qt框架编写的多线程应用程序
一、大纲 学习内容:使用两个线程,分别点击两个按钮,触发两个不同的效果 所需控件:两个button、三个label 涉及知识点:多线程、Qt的connect机制、定时器、互斥锁 需求: 1,多线程定时计数&#x…...
