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 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
随机推荐
- 让php支持多线程,win下安装pthreads
1.检查PHP版本是否支持线程安全 在phpinfo()的显示页中,搜索Thread Safety,如果是enabled,则PHP版本是线程安全的. 2.在http://windows.php.net ...
- VC++ 定时器使用总结
VC++ WM_TIMER 定时器使用方法 在编程时,会经常使用到定时器.使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程 ...
- springmvc与struts2的不同
1.springmv的入口是一个servlet,即前端控制器.而struts2入口是一个fliter过滤器. 2.springmvc是基于开发方法(一个url对应一个方法,通过注解的方式进行访问),请 ...
- 【z】Storm - the world's best IDE framework for .NET
http://www.codeproject.com/Articles/42799/Storm-the-world-s-best-IDE-framework-for-NET Storm - the w ...
- 自动化部署nginx负载均衡及监控短信报警
题: 开发脚本自动部署及监控 1.编写脚本自动部署反向代理.web.nfs: 要求: I.部署nginx反向代理三个web服务,调度算法使用加权轮询: II.所有web服务使用共享存储nfs,保证所有 ...
- 模板练习(LUOGU)
1:并查集 P3183食物链 #define man 300050 ; int find(int x){ if(fa[x]==x) return fa[x]; return fa[x]=find(fa ...
- gruop by报错this is incompatible with sql_mode=only_full_group_by
set @@GLOBAL.sql_mode=''; set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_ ...
- Memocache
http://blog.csdn.net/zhoufoxcn/article/details/6282099 http://blog.csdn.net/dinglang_2009/article/de ...
- 一篇文章Tornado快速入门
Tornado是一个PythonWeb框架.一个异步网络库.通过使用非阻塞网络I/O,Tornado能够处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架. 作为 ...
- 2018.10.14 bzoj4571: [Scoi2016]美味(主席树)
传送门 自认为是一道思想很妙的题. 直接分析问题. 如果没有xxx的干扰直接上可持久化01trie01trie01trie走人. 但现在有了xxx这个偏移量. 相当于把整个01trie01trie01 ...