Python核心编程之迭代器和生成器

MIPI信号的分析--结合示波器实际测试波形 如果排查的思路对你有帮助,请记住 消雨匆匆 or 大吊工。码字和排查很累,仅此而已 ,硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的。 部分内容来自于此博客的大神总结: http://www.elecfans.com/news/wangluo/20170323499614.html http://www.elecfans.com/yuanqijian/jieko... 阅读详情

迭代器和iter()函数
(1)什么是迭代器

    迭代器是版本2.2被加入Python中的,它为类序列对象提供了一个类序列的接口。
(2)为什么要迭代器
    引用PEP(234)中对迭代器的定义:
<1>提供了可扩展的的迭代器借口;
<2>对列表迭代带来了性能上的增强;
<3>在字典迭代中性能提升;
<4>创建真正的迭代借口,而不是原来的随机对象访问;
<5>与所有已经存在的用户定义的类以及扩展的模拟序列和映射的对象的后向兼容;
<6>迭代非序列集合(例如映射文件)时,可以创建更简洁可读的代码。
(3)如何迭代
    根本上说,迭代器就是一个有next()方法的对象,而不是通过索引来计数。条目全部取出以后,会引发一个StopIteration异常,这并不表示错误发生,只是告诉外部调用者,迭代完成。
    迭代器有一些限制。例如不能向后移动,不能回到开始,也不能复制一个迭代器。
    reversed()内建函数返回一个反向访问的迭代器。enumerate()内建函数同样也返回迭代器。any()和all(),如果迭代器中某个/所有条目的值都为布尔真时,它们的返回值为真。Python提供了一整个itertools模块,它包含各种有用的迭代器。
(4)使用迭代器
序列

>>> myTuple = (123,'xyz',45.67)
>>> i = iter(myTuple)
>>> i.next()
123
>>> i.next()
'xyz'
>>> i.next()
45.670000000000002
>>> i.next()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
StopIteration
如果这是一个实际的应用程序,我们需要把代码放在一个try-catch块中。序列现在会自动地产生它们自己的迭代器,所以一个for循环:
for i in seq:
    do_somthing_to(i)
实际上是这样工作的:
fetch = iter(seq)
while True:
     try:
         i = fetch.next()
     except StopItertation:
         break
     do_somthing_to(i)
for循环会自动调用迭代器的next方法,所以代码Just so.
字典
字典和文件是另外两个可以迭代的Python数据类型。字典的迭代器会遍历它的键。
文件
文件对象生成的迭代器会自动调用readline()方法。


(5)迭代器的创建
iter(obj)   一个实现了__iter__()和next()方法的类可以作为迭代器使用。
iter(func,sentinel)  它会反复地调用func,直到迭代器的下个值等于sentinel.


(6)列表解析(list comprehensions,or list comps for short)
    列表解析来自函数式编程语言Haskell。它是一个非常有用、简单而且灵活的工具,可以用来动态地创建列表。应用lambda、map()和filter()等方法啊可以灵活地创建列表。
列表解析的语法
[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]
>>> map(lambda x:x**2 ,range(6))
[0, 1, 4, 9, 16, 25]
>>> [x ** 2 for x in range(6)]
[0, 1, 4, 9, 16, 25]
>>> seq = [11,10,9,9,10,10,9,8,23,9,7,18,12,11,12]
>>> def ord(n):
...     return n % 2
>>> filter(lambda x:x%2, seq)
[11, 9, 9, 9, 23, 9, 7, 11]
>>> [x for x in seq if x % 2]
[11, 9, 9, 9, 23, 9, 7, 11]
>>>[(x+1,y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]


(7)生成器表达式
    生成器是特定的函数,允许你返回一个值,然后“暂停”代码的执行,稍后恢复。列表解析的一个不足就是必要生成所有的数据,所以用以创建整个列表。这可能对有大量数据的迭代器有负面效应。生成器表达式通过结合列表解析和生成器解决了这个问题。
    生成器表达式使用了“延迟计算”(lazy evaluation),所以它在使用内存上更有效。生成器表达式和列表解析及其相似:
(expr for iter_var in iterable if cond_expr)
列表解析:
[expr for iter_var in iterable if cond_expr]
>>> generator = (i for i in range(5))
>>> for obj in generator:
...     print obj,
...     
0 1 2 3 4


    Python支持通过yield语句实现的生成器,简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。这个机制可以很方便地实现一些东西,比如《Expert Python Programming》给出的这个生成fibonacci数列的例子:
def fibonacci():
  a, b = 0, 1
  while True:
    yield b
    a, b = b, a + b
fib = fibonacci()
for i in range(10):
  print fib.next(),

    这个例子可以求出fibonacci数列的前10项,而且当需要下一项的时候只需要fib.next()就可以了。    

    除了从获取生成器的结果,还可以给生成器发送值,另外还以可以关闭生成器生成进程。由于双向的动作涉及叫做send()的代码来向生成器发送值(以及生成器返回的值发送回来),现在yield语句必须是一个表达式(feel it),因为当回到生成器中继续执行的时候,你或许正在接受一个进入的对象。例:

def counter(start_at = 0):
    count = start_at
    while True:
        val = (yield count)
        if val is not None:
            count = val
        else:
            count += 1

count = counter(5)
print count.next()
print count.next()
print count.send(9)
print count.next()
print count.close()
print count.next()

5
6
9
10
None
Traceback (most recent call last):
  File "xxxxxxxxxxxxxxxxxxxxxxxxxx", line xxxx, in <module>
    print count.next()
StopIteration


REF:http://blog.youkuaiyun.com/CherylNatsu/article/details/6403327

U8备份提示“远程组件初始化失败” 问题现象: SQL出现问题后重装,U8没有重装,之后直接附加数据库,U8可以正常登陆,但是在备份的时候提示远程组件初始化失败。 问题原因: 因为重装了SQL,没有进行U8数据源初始化,导致Master库中丢失了存储过程储 解决办法:在Master库重建存储过程 USE [master] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[U8FileServerExtendProc] @cmdLi. 阅读详情

相关推荐

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 454

Python核心编程的四大神兽:迭代器、生成器 、闭包以及装饰器

生成器生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。 通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,正常使用列表的实现如下: def lifang_ls(): """求1-10所用整数的立方数-列表方式实现""" ls = [] for i in range(1,11..

python588的博客 232

车辆横向控制MPC实战:从‘老王模型’到CasADi求解的保姆级避坑指南

本文详细解析了车辆横向控制MPC的实战应用,从经典动力学模型选择到CasADi求解器的优化配置,提供了一套完整的避坑指南。重点介绍了车辆动力学模型的验证要点、CasADi环境的高效配置技巧以及MPC问题建模的核心要素,帮助开发者快速实现稳健的横向控制方案。

weixin_42524499的博客 346

为什么Python 3的迭代器和生成器如此重要?掌握这5大核心优势让你编程效率翻倍 [特殊字符]

Python 3中的迭代器和生成器是现代编程的**终极利器**,它们不仅仅是语法糖,更是提升代码性能和可读性的**完整解决方案**。作为Python核心特性的重要组成部分,迭代器和生成器在数据处理、内存优化和函数式编程中扮演着关键角色。 ## 🎯 迭代器与生成器的核心价值 ### 1. 内存优化的终极武器 迭代器和生成器采用**惰性计算**机制,只在需要时才生成数据,完美解决了大数据处理时

gitblog_00348的博客 757

AI 代码生成工具的质量评估体系

基础需求层包括响应速度(Response Time)和界面友好性(UI Friendliness),期望需求层涵盖智能提示(Smart Suggestions)和个性化配置(Personalization),兴奋需求层则涉及多模态交互(Multimodal Interaction)和代码进化(Code Evolution)。在金融领域,代码审计合规性(Compliance Audit)权重应提升至40%,而在Web开发中,API兼容性(API Compatibility)的权重需达到35%。

2503_92418637的博客 3372

AXI 1G/2.5G Ethernet Subsystem IP核使用过程中参数配置全解

AXI 1G/2.5G Ethernet Subsystem 是一个为FPGA设计的以太网子系统,它支持1Gbps和2.5Gbps的数据传输速率,使得FPGA能够直接进行高速以太网通信。这个子系统通常包含以太网MAC控制器、GMII(千兆媒体独立接口)或RGMII(简化GMII)接口、以及可选的PHY(物理层)接口支持。

u011565038的博客 1万+

python 如何判断一个函数执行完成_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...

本文将主要分为4大部分,分别介绍Python核心编程中的迭代器、生成器 、闭包以及装饰器。生成器生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,...

weixin_39880623的博客 562

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

Python生成器与迭代器的深度探索:从惰性求值到异步编程的核心范式

_iter__()和__next__()。"""自定义迭代器实现计数"""# 返回迭代器自身# 使用自定义迭代器。

不懂先生的博客 415

VTK API 详解(134):vtkOBJWriter - 写入 OBJ 模型

是 VTK 中用于将数据写入 Wavefront OBJ 文件格式的类。OBJ 格式是广泛支持的 3D 网格模型格式,支持顶点、面和基本几何信息的保存,便于模型在多种三维软件间交换。

yumeiguo的博客 140

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法。

kevin1499的博客 1617

Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器

本文将主要分为4大部分,分别介绍Python核心编程中的迭代器、生成器 、闭包以及装饰器。 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。 通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,正常使用列表的实现如下: def lifang_ls(): """求1-10所用整数的立方数-列表方式实

python学习者的博客 382

JumpServer未授权访问漏洞 CVE-2023-42442

JumpServer 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统。 JumpServer 使用Python / Django 进行开发。2021年1月15日,阿里云应急响应中心监控到开源堡垒机JumpServer发布更新,修复了一处远程命令执行漏洞。由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取到日志文件获取敏感信息,或者执行相关API操作控制其中所有机器。

holyxp的博客 1424

Python核心编程三大神兽——迭代器、生成器 、以及装饰器

并且每次迭代的结果都是下次迭代的初始值迭代器是用来迭代取值的工具。

2401_84584535的博客 316

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器

生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。 通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,正常使用列表的实现如下: 输出结果如下: 当数据量很少时,可以很...

weixin_30565327的博客 140

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python核心编程笔记(7)-迭代器,生成器

chap 8  1. 序列相关的内建函数:     sorted() 返回一个列表     reversed()  返回反序访问的迭代器     enumerate() 返回迭代器     zip()   返回一个列表      2. python可以在 while 和 for 循环中使用 else 语句. 它们是怎么工作的呢? 在循环中使用时, else子句只在循环完成后执

nexuszhoule的专栏 630

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python四大器_Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器

生成器生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,正常使用列表的实现如下:输出结果如下:当数据量很少时,可以很快得到结果。但是如果范围扩大到...

weixin_39802969的博客 330

Python核心编程的四大神兽:迭代器、生成器 、闭包以及装饰器_用一个生成器函数依次产生1-20的立方

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84561461的博客 715

Python核心编程三大神兽——迭代器、生成器 、以及装饰器(1)

print(next(iter_test)) #抛出StopIteration的异常,代表无值可取,迭代结束。@show_time #相当于 case = show_time(case) 语法糖。iter_test = iter(alist) #迭代器对象。print(next(iter_test)) #输出1。print(next(iter_test)) #输出2。print(next(iter_test)) #输出3。alist = [1,2,3] #可迭代对象。

m0_60634964的博客 202

Python学习之旅(核心编程基础篇011迭代器、生成器、面向对象)

Python学习之旅Python学习之旅2021.01.08一、迭代器二、生成器三、面向对象 Python学习之旅2021.01.08 指导教师:逻辑教育讲师Amy 一、迭代器 1.介绍:迭代器是一种迭代取值工具,迭代取值是一个重复过程,每一次重复都基于上一次的结果,是一种通用的不依赖索引的取值方式。for循环是一种迭代器 2.可迭代对象(可迭代对象不一定是迭代器) 可以用for循环遍历的对象都是可迭代的对象,如str、list、tuple、dict、set等 generator(生成器和yield生成

qq_36195536的博客 278

2024年Python最新Python核心编程三大神兽——迭代器、生成器 、以及装饰器(2),面试的时候看哪

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84140428的博客 452

python九九乘法表原理_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...

本文将主要分为4大部分,分别介绍Python核心编程中的迭代器、生成器 、闭包以及装饰器。生成器生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值;在下一次调用该函数执行时,程序将从上一次暂停的位置继续往下执行。通过一个例子来理解生成器的执行过程。求1-10的所有整数的立方并将结果打印输出,...

weixin_29372549的博客 231

Python核心编程的四大神兽:迭代器、生成器 、闭包以及装饰器_用一个生成器函数依次产生1-20的立方(2)

ls输出为{},dict输出为{},genarate输出为{},print_num输出为{}’.format(ls_ret,dict_ret,genarate_ret,print_num_ret))ls为{},dic为{},strs为{},ints为{}’.format(ls,dic,strs,ints))“”“分别判断列表,字典,字符串100,整形100是不是可迭代对象”“”“”“使用iter()将可迭代类型-列表转换为迭代器”“”“”“分别判断列表,字典、生成器是否为迭代器”“”“”“闭包内容”“”

2401_84561461的博客 649
上一篇: Python核心编程之字典和集合
下一篇: Python文件对象的内建方法和属性
Scandinavians
博客等级 码龄19年 36粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值