一、迭代器

可以进行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. 简单的几个Boost定时器

    boost的asio库里有几个定时的器,老的有 deadline_timer , 还有三个可配合 C++11 的 chrono 使用的 high_resolution_timer  . steady_ ...

  2. MEME(Motif-based sequence analysis tools)使用说明

    MEME(Motif-based sequence analysis tools)使用说明 2011-05-27 ~ ADMIN MEME是用于从一堆序列中搜索功能结构域的工具.比如说当你拿到了许多C ...

  3. EPLAN 软件平台中的词“点“大全

    1. 中断点(Interruption Point):     在原理图绘制时,如果当前绘图区域的空间不足,需要转到其它页面继续绘制,而这两页之间存在连续的“信息流“时,可以使用“中断点“来传递这种“ ...

  4. 优秀前端工程师必备: cookie的增删改查Demo!

    1 cookie可以很好地解决微信浏览器登录状态的保存,具体教程看下面链接: https://www.cnblogs.com/autoXingJY/p/10456767.html 2 参考了w3c等的 ...

  5. python 求第k个最大数

    #coding = utf-8 import sys def Cal_NO(a,b): nums=sorted(a,reverse=True) result=nums[b-1] return resu ...

  6. cxf maven依赖

         <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-front ...

  7. [翻译Joel On Software]选择一门语言/Choosing a language

    Joel on Software Choosing a language 选择一门语言 by Joel Spolsky Sunday, May 05,2002 Why do developerscho ...

  8. 关于java的volatile关键字与线程栈的内容以及单例的DCL

    用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新的值.volatile很容易被误用,用来进行原子性操作. package com.guangshan.test; pub ...

  9. Android ListView setOnItemClickListener/setOnItemSelectedListener,无效

    在Android 开发中,有时候我们在设置,LIstview,GridView,这些View的时候,再给他们设置:setOnItemClickListener/setOnItemSelectedLis ...

  10. Python学习-1.安装Python

    到Python的官方网站 https://www.python.org/downloads/ 下载官方的安装包 https://www.python.org/ftp/python/3.4.1/pyth ...