迭代器:

  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. GDB和Core Dump使用笔记

    一.GNU C编译器(即GCC) GCC使用 1 .gcc -g hello.c -o hello   编译生成可执行文件 2.gdb hello                     启动GDB ...

  2. js区分字符串和数字,有时候需要将字符串转换成数字

    js区分字符串和数字,有时候需要将字符串转换成数字 :parseInt

  3. Integer类分析(jdk8)

    一.构造函数 1. Integer类继承Number类,实现Comparable接口,重写了compareTo()方法. 2. Integer最小值为-2147483648,最大值为214748364 ...

  4. 【Codeforces】894D. Ralph And His Tour in Binary Country 思维+二分

    题意 给定一棵$n$个节点完全二叉树,$m$次询问,每次询问从$a$节点到其它所有节点(包括自身)的距离$L$与给定$H_a$之差$H_a-L$大于$0$的值之和 对整棵树从叶子节点到父节点从上往下预 ...

  5. 假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。

    假如数组接收到一个null,那么应该怎么循环输出.因为foreach与obj.length都会报错.null不是对象,foreach中不能赋值? sp页面forEach一个存放对象的集合,怎么判断其中 ...

  6. Android 仿淘宝属性标签页

    直接看效果图相信这样的效果很多,我之前在网上找了很久没找到自己想要的! <?xml version="1.0" encoding="utf-8"?> ...

  7. React Native探索(四)Flexbox布局详解

    相关文章 React Native探索系列 前言 在Android开发中我们有很多种布局,比如LinearLayout和RelativeLayout,同样在React Native也有它的布局,这个布 ...

  8. Android 进阶11:进程通信之 ContentProvider 内容提供者

    学习启舰大神,每篇文章写一句励志的话,与大家共勉. When you are content to be simply yourself and don't compare or compete, e ...

  9. svg实现 圆形 点击扩大、消失

    效果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  10. linux中的vim编辑器的使用

    vim的三种模式: 常规模式(命令模式)也是默认模式,从其它模式进行命令模式按esc i 在光标前插入文本 o 命令是指在当前行下方插入新行 dd 是删除光标所在的整个一行 yy 是在光标所在整个放入 ...