迭代器 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函数获取下一个元素

"""for语句其实就是iter函数,next函数与while语句的结合"""
L =[2,3,5,7]
for x in L:
print(x)
print("-----while语句---------")
it = iter(L)
while True:
try:
x = next(it)
print(x)
except StopIteration:
print("迭代终止,迭代器不能提供任何数据")
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 真值表达式])[]里的内容可以省略

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

      示例:   

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

      优点:不占用内存空间

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

L = [1,2,3,4]
gen = (x for x in L)#gen绑定生成器
lst = [x for x in L]#lst绑定列表
L[1] = 222 #改变原来列表的第二个元素
for x in lst:
print(x,end="|")#1|2|3|4|
for x in gen:
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. 使用“反向传播”迭代法求解y=√10

    X=√10,求X,也就是求Y=10 =X2 , X是多少. *重要的思想是,如何转化为可迭代求解的算法问题. *解数学问题,第一时间画图,求导,“直线化”. Y = X2 假如已知Y = 10 ,要求 ...

  2. AtCoder Grand Contest 036D - Negative Cycle

    神仙题?反正我是完全想不到哇QAQ 这场AGC真的很难咧\(\times 10086\) \(\bf Description\) 一张 \(n\) 个点的图,\(i\) 到 \(i+1\) 有连边. ...

  3. thinkpad p1 gen2 扬声器音量异常问题解决过程

    在弹出 "用户帐户控制" 对话框时的声音明显不对,测试后发现规律:音量在30以内,1分钟内扬声器无声音发出,运行ccleaner弹出 "用户帐户控制" 对话框, ...

  4. day 1 堆 hash 线段树 树状数组 冰茶姬 字典树 二叉查找树

    来郑州的第二天,早上开始也没说什么就说了些注意安全,各种各样的注意安全... 冰茶姬: 原来再打食物链时看了一下冰茶姬,只注意了路径压缩,没想到还有什么按秩排序但确实快了不少... int find( ...

  5. Java编程思想笔记——赋值

    赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何常数.变量或者表达式(只要它能生成一个值就行).但左值必须是一个明确的.已命名的变量.也就是说,必须有 ...

  6. echarts动态刷新数据

    在这次的项目中图表显示的部分比较多,这边给分享下用到的图表的数据刷新 饼图最后的效果 先看下 前端部分 <div div style="height: 40%; width: 17.5 ...

  7. 谷歌Chrome浏览器无法安装插件的解决方法(本文干货!)

    这个问题困扰了我很久,作为小白学习可能会用到谷歌插件,奈何谷歌也太变态,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,各种 ...

  8. PHP对象继承

    PHP对象继承<?php class foo{ public function printItem($string) { echo 'Foo: ' . $string . PHP_EOL; } ...

  9. Python面向对象 | 静态方法 staticmethod

    静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作.可以理解为,静态方法是个独立的.单纯的 ...

  10. Linux下mysql 多实例安装配置

    首先我们要清楚什么是多实例?所谓多实例就是用多个配置文件来启动多个不同端口的进程,以不同的端口的形式为外提供服务.明白了多实例 我们下面的操作和配置就一目了然了首先我们要安装一套基础的应用程序,也就是 ...