学习笔记迭代器 生成器

xiaoxiao2021-02-28  57

迭代器 Iterator 和 生成器 Generator 什么是迭代器:     迭代器是访问可迭代对象的一种方式,用迭代器可以访问可迭代对象     迭代器是指 iter(可迭代对象)返回的对象     迭代器可以用next(it) 函数获取可迭代对象的数据 迭代器函数 iter 和 next     iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象     next(iterator)从迭代器iterator中获取下一个记录,如果无法获取,则触发StopIterator异常 迭代器说明:     迭代器只能往前取值,不会后退     用iter函数可以返回一个可迭代对象的迭代器 示例:     l = [2,3,5,7]     it = iter(l)    #用iter 返回一个迭代器用it绑定     next(it)     #2  #用next(it) 用迭代器来获取l中的元素     next(it)     #3       next(it)     #5       next(it)     #7       next(it)     #StopIteration #通知调用这,已无数据     #用迭代器获取 range 对象的数据     it = iter(range(1,10,3))     next(it)     #1       next(it)     #4       next(it)     #7  

    next(it)     #StopIteration 

生成器 generator (python 2.5 及以后版本)     生成器是能够动态提供数据的对象,生成器对象也是可迭代对象     生成器有两种:生成器函数 和 生成器表达式 生成器函数的定义:     含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象 yield 语句     语法: yield 表达式     说明:         yield 用于def函数中,目的是将此函数作为生成器函数使用         yield 用来生成数据,供next(it)函数使用 生成器表达式:     语句:(表达式 for 变量 in 可迭代对象 [if 真值表达式])     注: [] 内的if部分可以省略     作用:用推导式形式生成一个新的生成器     示例:     gen = (x**2 for x in range(1,5))     it = iter(gen)     next(it)     #1       next(it)     #4       next(it)     #9       next(it)     #16       next(it)     #StopIteration   迭代工具函数:     迭代工具函数的作用是生成一个个性化的可迭代对象 zip(iter1[,iter2,...])     返回一个zip对象,此对象用于生成一个元组,此元组的个数是由最小的可迭代对象决定,元组内容是可迭代对象iter1和iter2中元素的组合     示例:         numbers = [10086,10000,10010,95588]         name = ['中国移动','中国电信','中国联通']         for t in zip(numbers, name):             print(t)         #(10086,'中国移动')         #(10000,'中国电信')         #(10010,'中国联通')                  dict(zip(numbers, name))         #{(10086:中国移动, 10000:中国电信, 10010:中国联通} enumerate(iterable[,start])     生成带索引的枚举对象,返回的迭代类型为索引-值对,默认索引从零开始,也可以     示例:         names = ['中国移动','中国电信','中国联通']         for t in enumerate(names, 1):             print(t) 字节串和字节数组:     字节串(也叫字节序列)  bytes     作用:         存储以字节为单位的数据     说明:         字节串是不可改变的序列         字节是0~255之间的整数     创建空的字节串的字面值:         b''         b""         b''''''         b""""""     创建非空的字节串的字面值:         B = b'hello'         B = b''hello''         B = b'''abc'''         B = b"""abc"""         B = b'abc\n123'         B = b'\x41\x42'     字节串的构造函数 bytes      bytes() 生成一个空的字节串 等同于b''      bytes(整数可迭代对象) 用可迭代对象初始化一个字节串      bytes(整数n)  生成n个为0的字节串      bytes(字符串,encoding='utf-8')           用字符串的转换编码生成一个字节串     bytes 的运算:         + += * *=         < <= > >= == !=         in / not in         索引和切片     用于序列的函数:         len, max, min, sum, any, all 都可用于字节串     序列的方法:         >>>help(bytes)     bytes 与 str的区别:         bytes  存储字节(0~255)         str    存储字符(Unicode值)     bytes 与 str转换         编码(encode)         str --->   bytes             b = s.encode(encoding='utf-8')         解码(decode)         bytes --->  str             s = b.decode(encoding='utf-8') 字节数组 bytearray     可变的字节序列   创建函数 bytearray     bytearray()     创建空的字节串     bytearray(整数)     bytearray(整型可迭代对象)     bytearray(字符串,encode='utf-8')   操作:     + += * *=     < <= > >= == !=     in / not in     索引 / 切片     (字节数组可以索引和切片赋值,赋值规则同列表的索引和切片) 练习:     1.已知一个集合:         s = {'工商银行','建设银行','中国银行','农业银行'}         1.用for语句遍历集合中的元素并打印         2.再用while实现     2.写一个程序,读入任意行的文字数据,当输入空行时结束输入     打印带有行号的输入结果:     如:         请输入:hello<回车>         请输入:tarena<回车>         请输入:bye<回车>         请输入:<回车>     输出如下:         第一行:hello         第一行:tarena         第一行:bye     3.用生成器函数生成斐波那契数列的前n个数:         def fibonacci(n):             ...             yield..         1) 输入前 20 个数         2) 求前 30 个数的和     4.写程序打印杨辉三角(只打印6层)          1         1 1        1 2 1       1 3 3 1      1 4 6 4 1

    1 5 10 10 5 1

转载请注明原文地址: https://www.6miu.com/read-2624930.html

最新回复(0)