迭代器:

  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. CSS颜色表示法、颜色表(调色板)

    1.CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF). 2.十六进制值使用 ...

  2. serialVersionUID 作用

    一个类在序列化时,用来记录当前类的版本号.在反序列化时,首先获取当前类的版本号,不一致则报异常. 若版本号一致,但两个类不一致.写肯定全部写进去.但提取时 类若没有这个字段,则不提取.若提取类多个字段 ...

  3. 服务器(Ubuntu 12.04 LTS)上编译基于OpenCV的项目遇到的问题及解决方案

    问题1:OpenCV编译安装时出错,错误信息中提到要打开-fPIC 选项重试. 解决方案:使用如下命令运行CMake cmake -DWITH_1394=OFF -DWITH_CUDA=OFF -DW ...

  4. LeetCode OJ:Lowest Common Ancestor of a Binary Tree(最近公共祖先)

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  5. 不用配置 , 快速搭建react环境

    链接 create-react-app react-webpack-generators react-cli

  6. 利用 localStorage 储存css js

    链接  版本号, 可以后台输出到jsp页面上 移动端webapp值得一试: 兼容性好 网速慢,LS读取+eval大多数情况下快于304 webapp不需要seo,css也可以缓存,再通过js加载 浏览 ...

  7. 基于epoll的TP传输层实现

    1. 抽象TP传输层设计 在使用epoll实现实际的传输层之前,先设计一个抽象的传输层,这个抽象的传输层是传输层实现的接口层. 接口层中一共有以下几个通用的类或者接口: (1)Socket:通用的套接 ...

  8. LeetCode 621. Task Scheduler

    原题链接在这里:https://leetcode.com/problems/task-scheduler/description/ 题目: Given a char array representin ...

  9. java多线程:synchronized和lock比较浅析

    转载:http://www.toutiao.com/a6392135944652587266/?tt_from=weixin&utm_campaign=client_share&app ...

  10. vs2015 c++ _findnext 报错

    定位 _findnext(hFile,&fileinfo) 报错. 错误 :0x00007FFC70CB0B2D (ntdll.dll)处(位于 Cutton_Dlg.exe 中)引发的异常: ...