Python学习笔记(2):生成器

介绍

我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,而且如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

实例1:基本生成器

1.1 生成器generator定义

gen = (x for x in range(1, 10))print(type(gen))

从上面解释性语法来描述,可以理解为,我们把遍历1-10的这个过程赋值给gen。从而gen就是一个生成器。我们可以通过使用next(gen)的方式来逐一迭代,或者可以使用for循环进行迭代。

1.2 next方式遍历

while True:try:print(next(gen), end=" ")except StopIteration:break

1.3 for循环遍历

for i in gen:print(i)

1.4 generator的方法

generator支持send(), throw(), close()方法,具体使用方式可以参考
https://blog.csdn.net/qq_40298233/article/details/78409251
这里不重复造轮子。

实例2:斐波那契数列(yield)

#!/usr/bin/python3import sysdef fibonacci(n): # 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n): returnyield aa, b = b, a + bcounter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成while True:try:print (next(f), end=" ")except StopIteration:sys.exit()

实例3:判断生成器的长度

其实一直没想好如何判断生成器的长度,目前采用for循环 + flag的方式标记

def fibonacci(n):  # 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n):returnyield aa, b = b, a + bcounter += 1f = fibonacci(-1)  # f 是一个迭代器,由生成器返回生成print(type(f))
i = 0
for a in f:i = i + 1print(a, end=" ")print(i)

实例4:os.walk

# root, dirs, files 分别代表当前的遍历目录,文件夹,文件
path = os.walk(path_name)
for root, dirs, files in path:print(root)print(dirs)print(files)

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

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

相关文章

Python学习笔记(3):zipfile解压库

简介 python自带zipfile解压库,导入方式如下 import zipfile批量解压 先尝试无密码解压,如果失败,就输入密码。但是zipfile解压大文件速度很慢。 path rL:/resource/zipPackage passwd b123456 def compressFromZip():for temp_name in…

数字万用表使用方法

数字万用表使用方法 简介:数字万用表相对来说,属于比较简单的测量仪器。本篇,作者就教大家数字万用表的正确使用方法。从数字万用表的电压、电阻、电流、二极管、三极管、MOS场效应管的测量等测量方法开始,让你更好的掌握万用表测…

Python学习笔记(4):Python如何设置类似C语言静态函数

介绍 模块封装时候,希望有一些函数不被外部直接调用。C语言通常采用static int function()形式以及头文件形式作为标识。而python不存在头文件,但可以通过修饰符staticmethod进行代替。 staticmethod def your_function():# 你的代码print("your …

c++ 字符串相等比较

介绍 在C 中比较字符串的技术 (Techniques to Compare Strings in C) Strings in C can be compared using either of the following techniques: 可以使用以下两种技术之一来比较C 中的字符串: String strcmp() function 字符串strcmp()函…

ffmpeg下载安装 多段ts视频m3u8下载

如何下载多段ts视频 m3u8 ffmpeg ffmpeg使用教程 下载 Windows下载方法 step1. 官网下载地址 点此进入下载地址 step2. 选择 Windows EXE files 中的Windows builds by BtbN 这会跳转到github页面中。 step3. 选择对应的linux平台或者windows平台进行下载 安装 step1.…

linux环境下安装多个任意版本的python环境

linux环境下安装多个任意版本的python环境 安装方法可以归结为 [下载 编译 配置环境变量] 下载Python 参考链接: .任意python版本下载,所有python版本下载的FTP路径 Windows下载发送到linux上 step1. 下载linux版本的python 从Python官网进入 选择…

linux云服务器状态上报解决方案:外发个人邮箱

linux云服务器状态上报解决方案:外发个人邮箱 需求如下: #### 将一些服务器的关键日志实时发送到手机上一些案例: CPU状态检测 解决方案: #### 利用mailx命令外发邮件方法如下: 1. 用管理员打开mail配置文件 >…

Matplotlib画图教程:在QT界面中嵌入三维图片

Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制。因此就诞生了做这么一个小模块的想法。 这里先上一下最终结果: 思…

Python工程笔记(1):轨迹与日志

轨迹记录模块(Recorder) 轨迹和日志是定位工程问题的备忘录和总结代码开发项目管理经验的基本素材,是工程交验收资料的重要组成部分 1.1 依赖表 包名含义安装方式系统包ostime 1.2 全局变量表 变量名含义初值log_file日志保存路径./recor…

Python代码优化(1):天气预报获取

天气预报获取模块 基于http://www.weather.com.cn/做了代码优化,每个函数功能更加明确,更加适合单独集成。接口也进行了优化,比网络上博主抄来抄去的源码要好一些。 改进点:获取天气拆成了多个函数,多次保存csv文件不…

proxy_pool开源项目攻克学习

开源项目攻克学习之proxy_pool 1. 学习背景 爬虫线程池,但是网络上付费的又很麻烦,于是在开源网站上找到一个版本进行学习。 https://github.com/jhao104/proxy_pool 本人操作系统deepin,有遇到一些问题,希望可以跟大家分享一…

pip 指定镜像源 指定版本 批量安装

要用 pip 安装指定版本的 Python 包,只需通过 操作符 指定 例如:pip install pycrypto2.6.1 将安装pycrypto2.6.1 版本。 要使用pip 批量安装,需要写requirements.txt文件,一行一个包 numpy matplotlib wxpypip install -r r…

Linux命令行下统计当前文件夹下的文件个数

统计某文件夹下文件的个数 ls -l |grep “^-”|wc -l 统计某文件夹下目录的个数 ls -l |grep “^d”|wc -l 统计文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep “^-”|wc -l 统计文件夹下目录的个数,包括子文件夹里的。 ls -lR|…

proxy_pool开源项目攻克学习2:服务器架设

proxy_pool开源项目攻克学习2:服务器架设 在这个文章proxy_pool开源项目攻克学习中,我们完成了本地的proxy_pool架设。现在我们将他转移到服务器上。 硬件环境准备 腾讯centos服务器。 软件环境准备 redispython3.7proxy_pool开源项目 安装过程 总…

python opencv安装

opencv安装 pip install opencv-python依赖安装 # libglvnd-1:1.3.2-1.tl3.x86_64 # libglvnd-glx-1:1.3.2-1.tl3.x86_64 # libxshmfence-1.3-2.tl3.x86_64 # mesa-libGL-20.3.3-2.tl3.x86_64 # mesa-libglapi-20.3.3-2.tl3.x86_64yum install libGL

nodejs轻量服务器后端

nodejs轻量服务器后端 搭建思路 server.js主函数 mine.js配置文件 index.html 测试网页 目录结构 __./|__ test1|__ index.html|__ mine.js|__ server.jsserver.js文件 var PORT 8080; //端口 var DIR test1; //用于存放html的目录var http require(http);…

[Leetcode713]乘积小于 K 的子数组

公司里偷偷刷题记录 做一下笔记 求解子数组方式: 两种方案: 通用方案就是前缀和查找 另一种是递增序列可用的滑动窗口 有些题目如果给出来的数字有正,负。那么一定就要转化成前缀和。 如果是全正数组,可以采用前缀和二分查找的…

[Leetcode15]三数之和

重刷一遍相向双指针 题目 leetcode15 https://leetcode.cn/problems/3sum/ 类似的题目还有leetcode16 leetcode16 解答思路 关键点 快排 双指针 1: 快速排序,之后使用双指针遍历对应的位置,求解 2: 主要是在确定了第一个值…

光学元件生产工艺流程

光学元件生产工艺流程 选胚料 – 开料(初步切割)- 清洗 - 上盘(批处理) – 切割 – 粗磨整平 – 粗检 – 细磨上盘 – 细磨 – 高速抛光 – 低速抛光 – 光胶 – 成片 – 上盘 – 成品切割 – 清洗 – 包装 粗磨阶段 选胚料: 选择光学元件的原材料,如K9,BK7玻璃等 开…

[leetcode933]最近的请求次数

每日偷偷刷题933和队列有关 思路 每来一次ping就记录时间,并返回3000s内ping的次数,本题数据量很大,正向暴力肯定是不行的。 初步思路:反向暴力,不删列表数据。从ping的下标往前推,并统计3000s的数据。 …