一、迭代器

可以进行for循环的 数据类型

str ,list tuple dict set 文件句柄

什么是可迭代对象?

方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭代对象.

s="abcd"

print

# # 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 迭代器,生成器.的更多相关文章

  1. Day 13迭代器生成器

    迭代器 1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象. 2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象. 3. ...

  2. Python 迭代器&生成器

    1.内置参数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  3. python杂记-4(迭代器&生成器)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...

  4. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  5. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  6. Python基础-迭代器&生成器&装饰器

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...

  7. 迭代器/生成器/装饰器 /Json & pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  8. Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)

    1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...

  9. Python装饰器、迭代器&生成器、re正则表达式、字符串格式化

    Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...

随机推荐

  1. ecplice中代码使用快捷键无法格式化,使用其他方法将代码格式化的步骤

    选中需要进行格式化的代码--->右键--->source--->format,就可以将代码格式化了.

  2. 80% UI 初学者走过的弯路,你走了几条?

    关于UI 对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及学UI到有哪些需要避免的弯路. 1.UI设计是做 ...

  3. 一篇文章Tornado快速入门

    Tornado是一个PythonWeb框架.一个异步网络库.通过使用非阻塞网络I/O,Tornado能够处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架. 作为 ...

  4. TF Boys (TensorFlow Boys ) 养成记(二): TensorFlow 数据读取

    TensorFlow 的 How-Tos,讲解了这么几点: 1. 变量:创建,初始化,保存,加载,共享: 2. TensorFlow 的可视化学习,(r0.12版本后,加入了Embedding Vis ...

  5. js如何实现网站title的滚动效果

    var text=document.title;//获得页面的标题            var timerID;//定时器            function newtext() {       ...

  6. 2018.09.30 bzoj2288:生日礼物(贪心+线段树)

    传送门 线段树经典题目. 每次先找到最大子段和来更新答案,然后利用网络流反悔退流的思想把这个最大字段乘-1之后放回去. 代码: #include<bits/stdc++.h> #defin ...

  7. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...

  8. 2018.09.12 earthquake(最优比率生成树)

    描述 地震已经破坏了农夫约翰所有的农场以及所有连接农场的道路.作为一个意志坚强的人,他决定重建所有的农场.在重建全部N(1 <= N <= 400)个农场之前,首先必须把所有农场用道路连接 ...

  9. Cygwin工具的简单使用

    简介 从使用角度来看:Cygwin就是一个windows软件,该软件就是在windows上仿真linux操作系统.简言之,cygwin是一个在windows平台上运行的 linux模拟环境,使用一个D ...

  10. Django入门与实践 1-16章总结

    注意事项:随时备份.随时记录.从宏观到微观 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之:学至于行之止矣 安装 Python 3.6.2 pip install django==1.11.4 ...