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()不是一个函数而是一个generatorgenerator又称为生成器,它具有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如何在从循环之外不断获取循环内的数据但不退出循环相关推荐

  1. python金融代码_Python2爬虫代码之获取金融品种行情数据

    #!/usr/bin/env python # -*- coding: utf-8 -*- import requests #使用requests包方便 import json #导入json模块 i ...

  2. 【python】字符串string的截取;获取字符串内的一串

    Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. # 例1:字符串截取 str = '1234567 ...

  3. python实现不登陆淘宝却获取到任意商品数据

    文章目录 一.前言 二.需要导入的库 三.页面分析 四.代码 五.结果展示 六.Blogger's speech 一.前言 1.爬取内容均为在淘宝页面,用户能够浏览到的数据 2.用于交流学习,不会用于 ...

  4. [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容

    目录 对于参数可以直接写入链接中的接口(适用于参数较少时) 对于参数需要使用字典进行携带的接口(适用于请求头中参数较多时) 本文介绍了使用GET的方式调用API的方式,如需要使用POST方式,将代码中 ...

  5. Jquery 循环遍历table获取tr内指定的元素,并校验查重,删除元素值有相同的tr

    //验证申请子表不能重复 function checksublist() {var idarray = new Array();$("table.table_title1").fi ...

  6. 库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用

    这是花了一个小时实践出来的! 网上有特别多的distinct +group by 的比较区别的,几乎没有几篇文章说他们的联合妙用. 步入正题,先说我发现妙用的基于实际问题: 库存与入库单的一个关系业务 ...

  7. Excel 表格做系统导入数据,获取表格内的数据。

    //  fileName  文件的路径 public Map<String, String> setDataMap( String fileName){ //保存到MAP上也可以使用其他数 ...

  8. python财务报表书籍_Python读财报-获取财务报表

    学习了一段时间python,学以致用,结合财报练练手. 代码环境:WIN10.Aanconda3.Jupyter notebook 第三方库:pandas .os.tuahare.datetime.t ...

  9. 通信达接口python通过第三方库的pytdx怎样获取最新股票行情?

    这是个很强大的第三方库,原理是解析通达信的.dat底层数据.大家在平时看盘下单的通达信软件.现在只需要在python里面安装第三方库,就可以获取到原始交易数据了. 获取行情数据的代码是这样的,返回数据 ...

最新文章

  1. 我又来定计划了~2015-8至年底
  2. JavaScript之function类型
  3. c++ 调用system 不显示黑框_Java回调的四种写法:反射+直接调用+接口调用+Lambda表达式...
  4. VTK:点定位器用法实战
  5. 设置熄屏_刚买的手机微信收不到信息提醒耽误事情,手机到手一定要这样设置...
  6. 【笔记】《C#高效编程改进C#代码的50个行之有效的办法》第1章C#语言习惯(1)--属性的特性以及索引器(SamWang)...
  7. Fiddler中常用的方法
  8. ACM竞赛数论知识积累
  9. Unmapped Spring configuration files found. Please configure Spring facet
  10. LTE CAT M1模块为辅助生活系统提供了宽带和智能手机的替代方案
  11. win10安装python详细过程
  12. 短视频的素材在哪里找呢?推荐给你一个好办法
  13. 不知细叶谁裁出,二月春风似剪刀
  14. 多益网络_网络安全的未来日益激烈的信息控制之战
  15. 如何做好基层管理者(一)
  16. CPU 内存 磁盘的关系
  17. 4大Excel文本合并技巧,这几个公式轻松帮你搞定
  18. 拉卡拉智能POS收单渠道前景如何?
  19. 计算机读不出相机磁盘,相机存储卡读不出来怎么办?相机存储卡无法读取
  20. PS工作区拖动乱了如何复位?

热门文章

  1. windows下UHD编译及工程应用
  2. java mongodb id_Java访问MongoDB数据库生成的ID
  3. 感染Nimda蠕虫病毒
  4. 拓嘉启远:怎样才能避免拼多多网店被限制
  5. [trouble shooting] mysqlhotcopy 报错 Can't locate Data/Dumper.pm in @INC
  6. 探地雷达(GPR)检测地下钢筋,并可视化钢筋
  7. 手把手教你制作属于自己的一键还原软件
  8. ROS-语音控制-会说话的机器人(1)-ubuntu16.04上安装运行snowboy
  9. 计算机视觉数据集处理
  10. 时间序列预测(1)-什么是时间序列预测