Python如何在从循环之外不断获取循环内的数据但不退出循环
Python如何在从循环之外不断获取循环内的数据但不退出循环
- 1.配置环境
- 2.问题描述
- 3.问题解决
- 4.结束语
1.配置环境
使用环境:python3.7
平台:Windows10
IDE:PyCharm
2.问题描述
博主在制作一个UI的时候遇到一个问题,我希望通过一个循环不断读取摄像头的图片,但是读取出来的图片需要在另一个函数中处理。一开始的想法是通过while循环读取摄像头图片,通过return返回读取出来的图片,再将读取到的图片传入到另外函数中进行处理。但是很快便发现通过return回来图片数据后,while循环便会中止。经过一段时间的分析博主解决了这个问题,记录在此博客中。如果你也遇到同样的问题或许这篇文章可以对你有所启发。
3.问题解决
首先我们将问题抽象一下:我们希望从循环之外不断获取一个循环中的数据,但不退出循环。
首先直接上代码
# author:Hurricane
# date: 2022/1/25
# E-mail:hurri_cane@qq.comdef loop():i = 0while True:yield "Data:%d" % ii += 1if __name__ == '__main__':loop_item = loop()for data in loop_item:data += " process"print(data)
计算结果如下:
代码中读取数据的循环是
def loop():i = 0while True:yield "Data:%d" % ii += 1
这是一个死循环,循环不断执行yield "Data:%d" % i
命令,这个命令是很关键的,由于存在yield
,所以loop()
不是一个函数而是一个generator
。generator
又称为生成器,它具有next方法,可以通过next命令让generator
向下执行。
现在我来看main
函数中如何使用这个generator
获取数据的,首先,我们通过如下命令将这个generator
实例化
loop_item = loop()
他们便得到了loop_item
这个实例化后的generator
,我们通过
next(loop_item)
来递推这个generator
:
每一次执行next
命令,loop中的循环便会执行到yield
语句,并且将yield
语句后的内容返回,然后暂时退出循环,当下一次执行next
命令,程序便会接着上次退出循环的位置继续执行循环中的内容。
通过next方法使用generator
是繁琐的,好在Python开发者为我们设计的for循环可以很好地简化这个步骤:
通过for循环可以调用这个generator
:
for data in loop_item:data += " process"print(data)
它的工作流程等效于:
while True:try:data = next(loop_item)data += " process"print(data )except StopIteration as e:print('Generator return value:', e.value)break
至此,我们便实现了从循环之外不断获取循环内的数据但不退出循环,对应到读取摄像头的方法如下:
# author:Hurricane
# date: 2022/1/25
# E-mail:hurri_cane@qq.com
import cv2def get_img():cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)while True:success, frame = cap.read()if success:yield frameif __name__ == '__main__':img_item = get_img()for img in img_item:img = cv2.resize(img,(400,300))cv2.imshow("img", img)cv2.waitKey(1)
4.结束语
如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
Python如何在从循环之外不断获取循环内的数据但不退出循环相关推荐
- python金融代码_Python2爬虫代码之获取金融品种行情数据
#!/usr/bin/env python # -*- coding: utf-8 -*- import requests #使用requests包方便 import json #导入json模块 i ...
- 【python】字符串string的截取;获取字符串内的一串
Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. # 例1:字符串截取 str = '1234567 ...
- python实现不登陆淘宝却获取到任意商品数据
文章目录 一.前言 二.需要导入的库 三.页面分析 四.代码 五.结果展示 六.Blogger's speech 一.前言 1.爬取内容均为在淘宝页面,用户能够浏览到的数据 2.用于交流学习,不会用于 ...
- [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容
目录 对于参数可以直接写入链接中的接口(适用于参数较少时) 对于参数需要使用字典进行携带的接口(适用于请求头中参数较多时) 本文介绍了使用GET的方式调用API的方式,如需要使用POST方式,将代码中 ...
- Jquery 循环遍历table获取tr内指定的元素,并校验查重,删除元素值有相同的tr
//验证申请子表不能重复 function checksublist() {var idarray = new Array();$("table.table_title1").fi ...
- 库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用
这是花了一个小时实践出来的! 网上有特别多的distinct +group by 的比较区别的,几乎没有几篇文章说他们的联合妙用. 步入正题,先说我发现妙用的基于实际问题: 库存与入库单的一个关系业务 ...
- Excel 表格做系统导入数据,获取表格内的数据。
// fileName 文件的路径 public Map<String, String> setDataMap( String fileName){ //保存到MAP上也可以使用其他数 ...
- python财务报表书籍_Python读财报-获取财务报表
学习了一段时间python,学以致用,结合财报练练手. 代码环境:WIN10.Aanconda3.Jupyter notebook 第三方库:pandas .os.tuahare.datetime.t ...
- 通信达接口python通过第三方库的pytdx怎样获取最新股票行情?
这是个很强大的第三方库,原理是解析通达信的.dat底层数据.大家在平时看盘下单的通达信软件.现在只需要在python里面安装第三方库,就可以获取到原始交易数据了. 获取行情数据的代码是这样的,返回数据 ...
最新文章
- 我又来定计划了~2015-8至年底
- JavaScript之function类型
- c++ 调用system 不显示黑框_Java回调的四种写法:反射+直接调用+接口调用+Lambda表达式...
- VTK:点定位器用法实战
- 设置熄屏_刚买的手机微信收不到信息提醒耽误事情,手机到手一定要这样设置...
- 【笔记】《C#高效编程改进C#代码的50个行之有效的办法》第1章C#语言习惯(1)--属性的特性以及索引器(SamWang)...
- Fiddler中常用的方法
- ACM竞赛数论知识积累
- Unmapped Spring configuration files found. Please configure Spring facet
- LTE CAT M1模块为辅助生活系统提供了宽带和智能手机的替代方案
- win10安装python详细过程
- 短视频的素材在哪里找呢?推荐给你一个好办法
- 不知细叶谁裁出,二月春风似剪刀
- 多益网络_网络安全的未来日益激烈的信息控制之战
- 如何做好基层管理者(一)
- CPU 内存 磁盘的关系
- 4大Excel文本合并技巧,这几个公式轻松帮你搞定
- 拉卡拉智能POS收单渠道前景如何?
- 计算机读不出相机磁盘,相机存储卡读不出来怎么办?相机存储卡无法读取
- PS工作区拖动乱了如何复位?
热门文章
- windows下UHD编译及工程应用
- java mongodb id_Java访问MongoDB数据库生成的ID
- 感染Nimda蠕虫病毒
- 拓嘉启远:怎样才能避免拼多多网店被限制
- [trouble shooting] mysqlhotcopy 报错 Can't locate Data/Dumper.pm in @INC
- 探地雷达(GPR)检测地下钢筋,并可视化钢筋
- 手把手教你制作属于自己的一键还原软件
- ROS-语音控制-会说话的机器人(1)-ubuntu16.04上安装运行snowboy
- 计算机视觉数据集处理
- 时间序列预测(1)-什么是时间序列预测