python3 迭代器,生成器
一 、什么是迭代
1、 重复
2、下次重复一定是基于上一次的结果而来
while True:
cmd=input(':')
print(cmd) l=[1,2,3,4]
count=0
while count < len(l):
print(l[count])
count+=1
二、 可迭代对象:obj.__iter__ 三 、迭代器:iter1=obj.__iter__()
1 iter1.__next__
2 iter1.__iter__ iter1.__next__()
iter1.__next__()
iter1.__next__() 迭代器:
优点:
1 不依赖索引
2 惰性计算,节省内存 缺点:
1 不如按照索引的取值方便
2 一次性,只能往后取,不能回退
l=[1,2,3]
for i in l: # obj=l.__iter__()
print(i)
迭代器的应用:
1、提供了一种不依赖索引的统一的迭代方法
2、 惰性计算,比如取文件的每一行
list = [1,2,3,4,5]
i = iter(list) #迭代器函数
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__()) i = list.__iter__() #迭代器对象
i.__next__() s1='hello'
s1.__iter__()
l=[1,2,3]
l.__iter__()
t=(1,2,3)
t.__iter__()
set1={1,2,3}
set1.__iter__()
d={'a':1,'b':2,'c':3}
d.__iter__() f=open('db.txt',encoding='utf-8')
print(f.__next__())
生成器函数
生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器
def foo():
print('first------>')
yield 1
print('second----->')
yield 2
print('third----->')
yield 3
print('fouth----->') g=foo() print(g)
from collections import Iterator
print(isinstance(g,Iterator))
生成器就是迭代器 print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) for i in g: #obj=g.__iter__() #obj.__next__()
print(i) '''
yield的功能:
1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
'''
def countdown(n):
print('starting countdown') while n > 0:
yield n
n-=1
print('stop countdown')
g=countdown(5)
print(g)
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__()) for i in g:
print(i)
生成器函数补充:迭代器的特性,不能循环取值
def countdown(n):
while n > 0:
yield n
n-=1 g=countdown(5)
print(g.__next__())
print(g.__next__()) print('='*20)
for i in g:
print(i) print('*'*20)
for i in g:
print(i) for i in countdown(5):
print(i)
print('*'*20)
for i in countdown(5):
print(i)
print('*'*20)
for i in countdown(5):
print(i) print(countdown(5).__next__()) #g才是迭代器
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__())
print(countdown(5).__next__()) print(countdown(5),countdown(5),countdown(5))
python3 迭代器,生成器的更多相关文章
- Python3 迭代器,生成器,装饰器
1.迭代器 迭代器有两个基本方法,iter()和next(),next()完成后会引发StopIteration异常 a='abcdef' b=iter(a) #创建迭代器对象 print(type( ...
- python3 迭代器&生成器
前戏:列表生成式 等于 用列表生成式生成列表.需要将所有数据生成到内存中,占用空间,如果数据太多.生成数据就会耗时较久. 例如需要运行卡顿一下..... 定义一个生成器:定义时不生成任何数据,只有通过 ...
- Python3+迭代器与生成器
转载Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素 ...
- python014 Python3 迭代器与生成器
Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结 ...
- Python3 迭代器与生成器 - 学习笔记
可迭代对象(Iterable) 迭代器(Iterator) 定义 迭代器和可迭代对象的区别 创建一个迭代器 创建一个迭代器类 使用内置iter()函数 StopIteration异常 生成器(gene ...
- day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
回顾下上次的内容 转码过程: 先decode 为 Unicode(万国码 ) 然后encode 成需要的格式 3.0 默认是Unicode 不是UTF-8 所以不需要指定 如果非要转为U ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- Python 迭代器&生成器
1.内置参数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- python杂记-4(迭代器&生成器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...
随机推荐
- 分享 go语言爬虫---开源项目Pholcus
写在开头的话:记录一下最近学习Pholcus(https://github.com/henrylee2cn/pholcus)的过程,首先去学习的go基本语法,在没接触的时候发现很多不理解的地方,但是当 ...
- Week1 Team Homework #1 from Z.XML-对于学长项目《shield star》的思考和看法
试用了一下学长黄杨等人开发的<shield star>游戏. 其实作为一个学弟,我对cocos2d-x引擎还算是比较了解,所以对于这样一款很“典型 ...
- 【iOS开发】iOS CGRectGetMaxX/Y 使用
在iOS的界面布局中我们可以使用CGRectGetMaxX 这个方法来方便的获取当前控件的x坐标值+宽度的数值,这样便可以方便布局. 同理CGRectGetMaxY是获取y坐标值+控件高度的值,当然这 ...
- flex builder 4
下载地址(需要登录):http://trials.adobe.com/AdobeProducts/FLBR/4/win32/FlashBuilder_4_LS10.exe 很全的在线帮助文档:http ...
- 团队作业4——第一次项目冲刺(Alpha版本)-第一篇
第一次项目冲刺——第一阶段 今天我们在宿舍开了个会,每个人都斗志昂扬的.撸起袖子加油干! 分工讨论 团队成员 任务 郭达 完成博客随笔和leangoo 刘德培 设计好数据库 石浩洋 搭建好LAM ...
- 第一个Spring小程序实战
ps:本文偏向原理和操作性,原理适合于任何编译器. 支持Spring入门,目的是在xml文件里面装配相关bean(java对象),并实现获取.(IOC) 一.先建立一个Spring新项目,添加mave ...
- stap中的entry函数
只有在ret probe函数中,在这个函数中才会使用@entry函数去提取变量 是因为ret probe 有什么特殊的吗?在中间这个变量会变化吗? A new operator, @entry, is ...
- systemtap如何写C函数 捎带着看看ret kprobe怎么用
在systemstap中自定义函数 Embedded C can be the body of a script function. Instead enclosing the function bo ...
- 【题解】Bzoj4316小C的独立集
决定要开始学习圆方树 & 仙人掌相关姿势.加油~~ 其实感觉仙人掌本质上还是一棵树,长得也还挺优美的.很多的想法都可以往树的方面上靠,再针对仙人掌的特性做出改进.这题首先如果是在树上的话那么实 ...
- [CF1066C]Books Queries
题目大意:维护一个数列,要求在左边插入一个数,在右边插入一个数,查询一个数的排名 题解:可以双指针,开个数组存每个数的位置 卡点:无 C++ Code: #include <cstdio> ...