Day 13 迭代器,生成器.








一、迭代器
可以进行for循环的 数据类型
str ,list tuple dict set 文件句柄
什么是可迭代对象?
方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭代对象.
s="abcd"
# # l = [1,2,3,4]
# # print("_iter_" in dir(l))#判断是否为迭代对象
#
# # l1=l.__iter__()
# # print(l1)# 将l 列表转换成迭代器
# # #<list_iterator object at 0x0079F9D0>
#
# # print(l1.__next__())
# # print(l1.__next__())
# # print(l1.__next__())
# # print(l1.__next__())#取值.
#
# r=range (100)
# print("_iter_" in dir(r)) # True
#
# r_iter = r.__iter__()
# print(r_iter)#转换成迭代器.
# # s ="abcde"
# print("__iter__" in dir(s))
# print("_iter_" in dir(555))
# 输出结果:
# True
# False # 可迭代对象,iterable 与迭代器有什么关系?
# 可迭代对象--->转换成迭代器
#
# 可迭代对象.__iter__() --->迭代器
s = "abcdefg"
s1 = s.__iter__()
print(s1) # 输出结果:<str_iterator object at 0x0048FAB0> # 迭代器的取值:
# s2 = "abcd"
# s3 =s2.__iter__()
# print(s3.__next__())
# print(s3.__next__())
# print(s3.__next__())
# print(s3.__next__())
# print("__iter__" in dir(s2))
# print("__iter__" in dir(s3))
# print("__iter__" in dir(s3))
# print("__iter__" in dir(s3)) # 输出结果:
# <str_iterator object at 0x0205C910>
# a
# b
# c
# d
# True
# True
# True
# True # 只含有__iter__方法的数据是可迭代对象.
#含有__iter__方法,并且含有__next__方法的数据是迭代器. # l=[1,2,3,4,5]
# print("__iter__"in dir(l))##判断是否为迭代对象
# print("__next__" in dir(l))
# liter= l.__iter__()
# print(liter.__next__())
# print(liter.__next__())
# print(liter.__next__())
# print(liter.__next__())
# 输出结果
# <str_iterator object at 0x0021FAB0>
# True
# False
# 1
# 2
# 3
# 4
#方法一:dir(被测对象)如果他含有__iter__,那么这个对象就叫做可迭代对象.
l = [1,2,3]
l_iter = l.__iter__()
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable))
print(isinstance(l,Iterator))
print(isinstance(l_iter,Iterator))
print(isinstance(l,list)) # 输出结果:
# <str_iterator object at 0x005DC910>
# True
# False
# 1
# 2
# 3
# 4
# True
# False
# True
# True # 迭代器的意义?
# 1. 迭代器节省内存。
# 2. 迭代器惰性机制。
# 3. 迭代器不能反复,一直向下执行。 '''
# for 循环机制:
# 内部还有__iter__方法,if __name__ == '__main__':
# 他会将可迭代对象先转换成迭代器然后在调用__next__方法.
他有异常处理的方法.
'''
for i in [1,2,3]:
print(i) l =[1,2,3]
l_iter=l.__iter__()
while True :
try :
print(l_iter.__next__())
except StopIteration:
break
print("__iter__" in dir(range (10)))
print("__next__" in dir(range(10)))
# 输出结果:
# True
# False 二、生成器
'''
什么是生成器
生成器的本质就是迭代器 ,生成器是自己用python代码写的迭代器
1. 可以用生成器函数.
2. 可以用各种推倒式构建迭代器.
3.可以通过数据转换.
'''
def func():
print(111)
return 222
ret= func()
print(ret) #生成器函数 生成器 .
def gener():
print("aaa")
yield 222
print("bbb")
yield 333
print("ccc")
g =gener()
print(g)
print(g.__next__())
print(g.__next__())
# return 返回给调用者值,并结束此函数.
#yiled 返回给调用者值,并将指针停留在当前位置.
#返回结果.
# <generator object gener at 0x022A5780>
# aaa
# 222
# bbb
# 333 def cloth():
for i in range(10000):
print("衣服%s"%i) cloth()
g_cloth =cloth()
print(g_cloth._next_())
print(g_cloth._next_())
for i in range (50):
print(g_cloth._next_())
for i in range (50):
print(g_cloth._next_()) #send
# 1,send 和next功能一样
# 2, 给上一个yiled 整体发送一个值
# send不能给最后一个yield发送值
# 获取第一个值的时候,不能用send 只能用next
# def gener():
# yield 222
# count = yield 333
# print('-------->',count)
# yield 'aaa'
# yield 'bbb'
# g = gener()
# print(g.send('AAA'))
# print(g.send(None))
# print(g.send('AAAA'))
# print(g.send('wwwwww'))
Day 13 迭代器,生成器.的更多相关文章
- Day 13迭代器生成器
迭代器 1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象. 2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象. 3. ...
- 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 = ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- 迭代器/生成器/装饰器 /Json & pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)
1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
随机推荐
- centos6.6 下 安装 php7 按 nginx方式
1.安装必要的依赖库 > yum -y install gd zlib libjpeg libjpeg-devel libpng libpng-devel freetype freetype-d ...
- jquery 处理重新绑定插件的方法
比如有一个slide的jquery插件,页面打开就对dom进行了绑定. <div class="expert"> <div class="expert- ...
- mongodb的安装配置方法
安装方法: https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-red-hat/ 使用向导: https:// ...
- p3412 [POI2005]SKO-Knights
传送门 分析 图1 我们假设我们现在有两个向量(2,3)和(4,2),将他们所能到达的点在几何画板上画出来,再将这些点用红线连起来,在将横坐标相同的点用蓝线连起来便能得到图1,就此我们可以发现可以用绿 ...
- python基础之删除文件及删除目录的方法-乾颐堂
下面来看一下python里面是如何删除一个文件及文件夹的~~ 首先引入OS模块 import os 删除文件: os.remove() 删除空目录: os.rmdir() 递归删除空目录: os.re ...
- linux两个线程
http://blog.csdn.net/marksinoberg/article/details/50945212
- sublime3 多行编辑.摘抄
Sublime text 3是一个非常强大的网站编辑工具. 这里小云深深的被它的快速编辑多行内容功能所吸引. 先说下,使用下面的功能要安装一个叫emmet的插件.没有的话,自行度娘吧. 下面就来看下具 ...
- sci-hub 下载地址更新
# 2017-12-14 可用 http://www.sci-hub.tw/ 文献共享平台
- Linux Bash命令总结
Bash命令 一:man命令,是manual 手册的意思,如man ps表示查看ps命令的手册,man man查看man命令的手册:也可以通过man xx查看是否有xx命令. 二:cat命令,用来一次 ...
- AE(ArcEngine)定制工具Tool工具箱
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...