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