迭代器
# print('__iter__' in dir(int))# print('__iter__' in dir(list))
# print('__iter__' in dir(dict))
# print('__iter__' in dir(set))
# print('__iter__' in dir(tuple))
# print('__iter__' in dir(enumerate([])))
# print('__iter__' in dir(range(1)))
# print('__iter__' in dir(bool))
#只要是能被for循环的数据类型就一定拥有__iter__方法
# print([].__iter__()) #一个列表执行了__iter__()之后的返回值就是一个迭代器
# print(dir([]))
# print(dir([].__iter__()))
# print(set(dir([].__iter__())) - set(dir([])) )
# print([1,2,3].__iter__().__length_hint__()) #元素个数
# l = [1,2,3]
# iterator = l.__iter__()
# print(iterator.__next__())
# print(iterator.__next__())
# iterable 可迭代的 ------__iter__ 只要含有iter方法的都是可迭代的
# [].__iter__() 迭代器 ----》__next__ #通过next就可以从迭代器中一个一个取值
#只要含有iter方法的都是可迭代的 ----------可迭代协议
#迭代器的概念
# 迭代器协议 -------内部含有__next__和__iter__方法的就是迭代器
#迭代器协议和可迭代协议
#可以被for循环的都是可迭代的
#可迭代的内部都有__iter__方法
#只要是迭代器一定可迭代
#可迭代的.__iter__方法就可以得到一个迭代器
#迭代器中的__next__()方法可以一个一个的获取值
#for循环其实就是使用迭代器
#可迭代对象——range(10)
#直接给内存地址
#只有是可迭代对象的时候才能用for
#当我们遇到一个新的变量,不确定能不能for循环的时候就判断它是否可迭代
#迭代器的好处
# 从容器类型中一个一个取值,会把所有的值都取到
# 节省内存空间
#迭代器并不会在内存中占用一大块内存
#而是随着循环,每次生成一个
#每次next每次给我一个
#生成器
#生成器函数:本质上就是我们自己写的函数
#生成器表达式
#只要含有yield关键字的函数都是生成器函数
#yield 不能和return共用,且需要写在函数内部
def generator():
print(1)
yield 'a'
#只要是生成器函数,执行之后会得到一个生成器作为返回值
ret = generator()
print(ret)
print(ret.__next__())

def generator():
print(1)
yield 'a'
print(2)
yield 'b'
g = generator()
print(g.__next__())
print(g.__next__()) 1
a
2
b
def wahaha():
for i in range(2000):
yield '娃哈哈%s'%i
g = wahaha()
count = 0
for i in g:
count+=1
print(i)
if count >50:
break
# print('%%%%%%%%%%%%%%%%%%',g.__next__())
for i in g:
count+=1
print(i)
if count >100:
break

监听文件的例子

def tail(filename):
f = open(filename,encoding='utf-8')
while True:
line = f.readline()
if line.strip():
yield line.strip()
g = tail('file')
for i in g:
if 'python' in i:
print('%%%%%%',i) %%%%%% python
%%%%%% hello python
												

Python9-迭代器-生成器-day13的更多相关文章

  1. 迭代器、生成器 day13

    一 迭代器 迭代器的由来pythone2.2引进的,是一种序列(也是一种数据类型),也是为类对象提供一个序列的入口. for 循环str list tuple dict set 文件句柄可迭代: s ...

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

    本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...

  3. Python 迭代器&生成器

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

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

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

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

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

  6. python 迭代器 生成器

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

  7. Python_迭代器-生成器-复习-习题_41

    # 迭代器和生成器# 迭代器 # 可迭代协议 —— 含有iter方法的都是可迭代的 # 迭代器协议 —— 含有next和iter的都是迭代器 # 特点 # 节省内存空间 # 方便逐个取值,一个迭代器只 ...

  8. day14 迭代器 生成器 面向过程思想

    "" 迭代器 什么是迭代器(iterator) 器指的某种工具, 迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2 迭代的目的是要根据上一个结果,产 ...

  9. python各种模块,迭代器,生成器

    从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名就是test) 包:用来从逻辑上组织模块的,本质就是一个目 ...

  10. Day 13 迭代器,生成器.

    一.迭代器 可以进行for循环的 数据类型 str ,list tuple dict set 文件句柄 什么是可迭代对象? 方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭 ...

随机推荐

  1. 给ACM newer的编程技巧

    一.复杂度 1.1什么是复杂度? 在设计满足问题要求的算法时,复杂度的估算是非常重要的.我们不可能把每个想到的算法实现一遍看看是否足够快.应当通过估计算法的复杂度来判断所想的算法是否足够高效. 1.2 ...

  2. 记次浙大月赛 134 - ZOJ Monthly, June 2014

    链接 虽做出的很少,也记录下来,留着以后来补..浙大题目质量还是很高的 B 并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类 ...

  3. PHP中的文件操作

      文件系统的概述 任何类型的变量在运行的时候都是将其加载到内存里面.但是内存有一个特点:CPU读取内存的速度很快,但是一旦断电,内存里面的数据就会消失.如果要持久的保存数据,有两种方法:将数据存储到 ...

  4. ios,弹窗遮罩滚动穿透解决方案

  5. MFC双缓冲解决图象闪烁[转]

    转载网上找到的一篇双缓冲的文章,很好用.http://www.cnblogs.com/piggger/archive/2009/05/02/1447917.html__________________ ...

  6. list control 【转】

    1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标      LVS_SMALLICON: 为每个item显示小图标      LVS_LIST: 显示一列带有小图标的ite ...

  7. rsyslog+analyzer

    环境:最小化centos6.2 准备:rsyslog-4.6.1.tar.gz  loganalyzer-3.6.3.tar.gz wget http://download.adiscon.com/l ...

  8. python深浅拷贝问题

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 又叫变量对对象的引用 l ...

  9. navicate连接mysql

    1. 打开navicate,选择连接 2. 编辑连接属性 编辑完成之后,连接成功.

  10. JavaScript(appendChild添加节点)

    首先,我们有一个编辑器,有一个简单的HTML页面,页面的级别分别 --> html  -->head[title,meta,script,link] -- body,然后再新建一个inde ...