迭代器:

  for 循环可以循环的就是可迭代对象。

    可迭代对象:str, list, tuple, dict, set, range。

      迭代器:f1文件句柄。

可迭代协议:

     可以被迭代要满足的要求就叫做可迭代协议。可迭代协议的定义非常简单,就是内部实现了__iter__方法。

可迭代对象:

  内部含有__iter__方法的对象就叫做可迭代对象。

如何判断:两种方式:

s = 'guqingqiu'
# print(dir(s))
print('__iter__' in dir(s)) # True
from collections import Iterable
print(isinstance(s,Iterable)) # True

将可迭代对象转化成迭代器:     可迭代对象.__iter__() ---->迭代器

迭代器不仅含有__iter__,还含有__next__。遵循迭代器协议。

s = 'guqingqiu'
l_s = s.__iter__() #将 s 转化成迭代器
print('__iter__' in dir(l_s)) # True
print('__next__' in dir(s)) # False
print('__next__' in dir(l_s)) # True

迭代器的好处:

    1,节省内存空间。

    2,满足惰性机制。

    3,不能反复取值,不可逆。

l = [1,2,3,4,5]
for i in l:
print(i)
# 1,将可迭代对象转化成迭代器。
# 2,内部使用__next__方法取值。
# 3,运用了异常处理去处理报错。

while 循环 模仿 for 循环内部机制:

l = [1,2,3,4,5]
l_obj = l.__iter__() #将列表转化成迭代器
while True:
try:
i = l_obj.__next__() #__next__用法:惰性打印迭代器里的值
print(i)
except StopIteration: # 不写默认是:Exception(可忽略所有报错),忽略StopIteration错误
break # 跳出循环

生成器:

def func():
print(111)
print(222)
yield 333
print(444)
yield 555
g = func()
g.__next__() #将生成器内的值第一个 yield 以上的打印
g.__next__() # 将生成器 第一个 yield下 第二个 yield 以上的打印出来。 #
#
#

    1,函数中只要有 yield 那她就不是一个函数,而是一个生成器。

    2,g 称作生成器对象。

  send 用法:

def generator():
print(123)
content = yield 1
print('yield 1:',content) # yield 1: hello
print(456)
yield 2
g = generator()
g.__next__() #
g.send('hello') # 456 #send 的效果和next一样。 # send 获取下一个值得效果和 __next__基本一致。
# 只是在获取下一个值的时候,给上一个 yield 的位置传递一个数据。
# 使用 send 的注意事项:
# 第一次使用生成器的时候 使用 __next__获取下一个值。
# 最后一个 yield 不能接受外部的值。

python's thirteenth day for me 迭代器 生成器的更多相关文章

  1. python 全栈开发,Day13(迭代器,生成器)

    一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...

  2. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  3. python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式

    闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...

  4. Python基础_可迭代的/迭代器/生成器

    介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...

  5. 可迭代对象&迭代器&生成器

    在python中,可迭代对象&迭代器&生成器的关系如下图: 即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象. 可迭代对象 如上图,这里x是一个列表(可迭代对象),其实正如第 ...

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

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

  7. Python 迭代器&生成器

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

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

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

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

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

随机推荐

  1. cvSmooth函数 和 OpenCV自带的人脸检测

    记录cvSmooth函数的用法和 OpenCV自带的人脸检测. (1)cvSmooth函数 void cvSmooth( const CvArr* src, CvArr* dst,int smooth ...

  2. OSI七层模型及应用

    应用层:提供访问网络服务的接口.例如telnet. 表示层:提供数据格式转化服务.例如压缩和解压缩. 会话层:提供回话实体的连接服务,进行访问验证和会话管理.例如服务器验证用户登录和断点续传. 传输层 ...

  3. EL表达式 分割字符串 ,forEach定次循环

    后台取出来的是字符串  以 a,b,c,   的形式  前台要将字符串中的“,”去掉 ,并forEach重新拼接 list.labelsName不用加${} <c:set value=" ...

  4. easyui tabs页签显示在底部属性

    data-options="tabPosition:'bottom'" 如果没有该属性  页签默认显示在最上面,效果如下 当加上了该属性  ,页签会出现在底部

  5. 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F】等式(因子个数)

    题目描述 给定n,求1/x + 1/y = 1/n (x<=y)的解数.(x.y.n均为正整数) 输入描述: 在第一行输入一个正整数T.接下来有T行,每行输入一个正整数n,请求出符合该方程要求的 ...

  6. Linux各文件及目录说明2018-03-01更新

    本人wechat:YWNlODAyMzU5MTEzMTQ=. *** /etc /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/clo ...

  7. Flask的消息message机制flash

    Flask的消息机制flash message是一个基于session实现的用于保存数据的集合,其特点是:使用一次就删除. 原理就是 操作成功 session['操作'] = 'msg' # 设置 s ...

  8. Zookeeper集群是如何升级到新版本的

    方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本. 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重 ...

  9. (七)java转译字符与连接字符串

    转义字符:通过“\”来改变后面字符的意义 \n空格 \t相当于table键 \b相当于回退 class Zyzf { public static void main(String[] args) { ...

  10. Java [Leetcode 357]Count Numbers with Unique Digits

    题目描述: Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. ...