迭代器 iterator  和 生成器 generator

  什么是迭代器:迭代器就是获取迭代对象中元素的工具,迭代器是由可迭代对象生成的

    1、迭代器是指用iter(可迭代对象)函数返回的对象(实例)

    2、迭代器可以用next(it)函数获取可迭代对象的数据

  迭代器函数:

    1、iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代对象,<list_iterator object at 0x0000027694817588>、    ·                           <tuple_iterator object at 0x0000027694817630>、<range_iterator object at 0x00000276945E7CF0>...

    2、next(iterator)从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发StopIteration异常

  说明:

    1、迭代器是访问可迭代对象的一种方式

    2、迭代器只能向前取值,不能后退

    3、用iter函数可以返回一个可迭代对象的迭代器

    4、可迭代对象 创建 迭代器,迭代器 访问 迭代器对象

  迭代器的用途

    迭代器对象能用next函数获取下一个元素

  1. """for语句其实就是iter函数,next函数与while语句的结合"""
  2. L =[2,3,5,7]
  3. for x in L:
  4. print(x)
  5. print("-----while语句---------")
  6. it = iter(L)
  7. while True:
  8. try:
  9. x = next(it)
  10. print(x)
  11. except StopIteration:
  12. print("迭代终止,迭代器不能提供任何数据")
  13. break

  生成器 Generator (python 2.5之后才产生的)

    什么是生成器:

      生成器是指能够动态提供数据的对象,生成器对象也是可迭代对象(实例)<generator object myyield at 0x0000020BA953D0A0>

    生成器有两种:

      1、生成器函数

      2、生成器表达式

    生成器函数定义:

      含有yield语句的函数是生成器函数,此函数被调用时将返回一个生成器对象

      注:yield翻译为产生(或生成)

      语法:yield 表达式

      说明:1、yield用于def函数中,目的是将此函数作为生成器函数使用

         2、yiled用来生成数据,供迭代器next(it)函数使用

    生成器函数说明:

      1、生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象

  

      2、在生成器函数调用return语句时会产生一个StopIteration异常来通知next(it)不能再提供数据

    生成器表达式:

      语法:(表达式 for  变量  in  可迭代对象 [if 真值表达式])[]里的内容可以省略

      作用:用推导式的形式生成一个新的生成器

      示例:   

  1. gen = (x**2 for x in range(1,4) )
  2. print(next(gen))#
  3. print(next(gen))#
  4. print(next(gen))#

      优点:不占用内存空间

  列表推导式 和 生成器表达式的区别:

  1. L = [1,2,3,4]
  2. gen = (x for x in L)#gen绑定生成器
  3. lst = [x for x in L]#lst绑定列表
  4. L[1] = 222 #改变原来列表的第二个元素
  5. for x in lst:
  6. print(x,end="|")#1|2|3|4|
  7. for x in gen:
  8. print(x,end="|")#1|222|3|4|

  迭代工具函数:

    迭代工具函数的作用是生成一个个性化的可迭代对象

  函数

  1、zip(iter1[,iter2,iter3,...])返回一个zip对象,此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定  

  示例

    numbers = [10086,10000,10010,95588]

    names = ["中国移动","中国电信","中国联通"]

    for  x in zip(numbers,names)

       print(x)        #(10086,"中国移动")(10000,"中国电信")(10010,"中国联通")

  2、enumerate函数(枚举函数)

    格式:enumerate(iterable[,start])

    作用:生成带索引的枚举对象,返回迭代类型为索引-值对(index,value)对,默认索引从0开始,也可以使用start绑定

字节串 bytes 和 字节数组 bytearray

  字节串 bytes(一字节等于八位,1byte = 8bit)

    作用:存储以字节为单位的数据

    说明:1、字节串是不可变的字节序列

       2、字节是0~255之间的整数

    创建空字节串的字面值:

        b''

        b""

        b''''''

        b""""""

        B''

        B""

        B''''''

        B""""""

    创建非空字节串的字面值:(在上面表达式里面填写值)

        b'ABC'

        b"\x41"  #b"a"

    字节串的构造函数 bytes

        bytes()                     生成一个空的字节串 等同于 b' '

        byes(整型(小于等于255)可迭代对象)       用可迭代对象初始化一个字节串

        bytes(整数n)                   生成n个值为0的字节串

        bytes(字符串,encoding = 'utf-8')          用字符串的转换编码生成一个字节串

    字节串的匀运算: + +=  *  *=     <  <=   >  >=  ==   !==   in  /  not in  索引/切片

    bytes 与 str 的区别:

        bytes 储存字节(0-255)

        str     储存Unicode字符(0-65535)

    bytes 与 str 的转换

        str ---------编码(encode)--------→bytes:b = s.encod("utf-8")

        bytes -------解码(decode)-----→str      :s = b.decode("utf-8")

  字节数组 bytearray

    可变的字节序列

    创建字节数组的构造函数:

      bytearray()            创建空的字节数组

      bytearray(整数)            

      bytearray(整型可迭代对象)

      bytearray(字符串,encoding=“utf-8”)

      注:以上参数等同于字符串

    字节数组的运算: +  +=   *   *=

      比较运算:<   <=    >   >=  ==  !=

      in / not in

      索引、切片(字节数组支持索引和切片,规则用列表相同)

    bytearray 的方法:

      B.clear()        清空字节数组

      B. append(n)   追加一个字节(n为0-255的整数)   

      B.remove(value)     删除第一次出现的字符,如果没有出现,则产生ValueError错误

      B.reverse()    字节的顺序进行反转

      B.decode(encoding=“utf8”)  解码

      B.find(sub[,start[,end]])    查找如果存在返回下标索引,如果不存在则返回-1

总结:

  迭代器:用来访问可迭代对象的数据,iter(),next()

  生成器函数:根据实际需要动态创建一些数据(数据原来不存在,用yield现用现生成)

  生成器表达式:

  字节串和字节数组

python_迭代器和生成器、字节串、字节数组的更多相关文章

  1. Python_迭代器和生成器的复习_38

    迭代器和生成器 迭代器: 双下方法:很少直接调用的方法,一般情况下,是通过其他方法触发的 可迭代的协议——可迭代协议 含有__iter__ 的方法 ('__iter__' in dir(数据)) 可迭 ...

  2. Python_迭代器、生成器、列表推导式,生成器表达式

    1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...

  3. python_迭代器和生成器

    迭代器和生成器 1.迭代器 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比 ...

  4. Python_迭代器与生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...

  5. [转]python常用的十进制、16进制、字符串、字节串之间的转换

    阅读目录(Content) 整数之间的进制转换: 字符串转整数: 字节串转整数: 整数转字节串: 字符串转字节串: 字节串转字符串: 测试用的python源码 进行协议解析时,总是会遇到各种各样的数据 ...

  6. Python全栈工程师(迭代器、字节串)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰     Python人工智能从入门到精通 迭代器 Iterator: 用<&g ...

  7. 【实验向】问题:假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示:

    问题: 假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示: unsigned char[16] = {0x3f, 0xa0, 0x00, 0x00, 0x ...

  8. python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

    进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 ...

  9. python常用的十进制、16进制、字符串、字节串之间的转换

    进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 ...

随机推荐

  1. 转:PHP删除目录及目录下所有文件

    PHP删除目录及目录下所有文件 <?php //循环删除目录和文件函数 function delDirAndFile( $dirName ) { if ( $handle = opendir(  ...

  2. C语言I作业06

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9888 我在 ...

  3. 学习笔记55_Nhibernate

    另一种ORM框架 1.添加各种dll 2.添加配置信息,根据文档直接复制粘贴.config //一般下载Nhibernate-3.0.0.Alpha2-bin包,会有Configuration_Tem ...

  4. Scrapy爬虫day1——环境配置

    安装 Scrapy pip install scrapy 配置虚拟环境 mkvirtualenv Spider 创建项目 在Spider的虚拟环境中运行 scrapy startproject Boo ...

  5. 非旋treap (fhq treap) 指针版

    传送门 看了一圈,好像真的没什么用指针的呢.. 明明觉得指针很好看(什么??你说RE???听不见听不见) 其实我觉得用数组的话不RE直接WA调起来不是更困难嘛,毕竟通过gdb还可以知道哪里RE,WA就 ...

  6. 利用python实现微信小程序游戏跳一跳详细教程

    利用python实现微信小程序游戏跳一跳详细教程 1 先安装python 然后再安装pip <a href="http://newmiracle.cn/wp-content/uploa ...

  7. python文件的基本操作

    打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...

  8. docker监控容器

    Weave Scope: 是能够自动生成一张 Docker 容器web动态图的监控软件,能够让我们直观地理解.监控和控制容器. 监控一台主机: 第一步:安装 [root@localhost ~]# c ...

  9. Class文件结构全面解析(上)

    什么是Class文件? 在Java刚刚诞生的时候就提出了一个非常著名的口号:"一次编写,到处运行.(Write Once,Run Anywhere)".为了实现平台无关性,各种不同 ...

  10. C++中对封装的语法支持——静态成员

    静态成员(变量与函数) 1.静态成员变量的语法.访问.特点(共享.类内声明类外初始化) 静态成员变量在class中只做声明,并没有初始化所以不会分配内存. (1) 非静态成员变量必须通过对象来访问. ...