生成器 Generator 和 迭代器 Iterator
什么是生成器:
生成器是一种可以简单有效的创建迭代器的工具
生成器有两种:
生成器函数 和 生成器表达式
什么是生成器函数:
含有yield语句的函数是生成器函数,此函数被调用时返回一个生成器对象
注:yield 翻译为产生或生成
示例:
def myyield():
yield 2
yield 3
yield 5
yield 7
yield 语句
语法:
yield 表达式
语法说明:
yield用于def函数中,目的是将此函数作为生成器函数使用
yield用来生成数据,供迭代器的next(it) 函数使用
range(start, stop, step) 就是生成器函数
生成器函数说明:
生成器函数的调用将返回一个生成器对象,生成器对象用来生成迭代器
在生成器函数内调用return会产生一个StopIteration异常
什么是迭代器:
是指能用next(it)函数取值的对象(实例)
用iter(obj) 函数可用可迭代对象(序列等或生成器)返回一个迭代器
迭代器说明:
迭代器是访问可迭代对象的一种方式
迭代器只能往前取值,不会后退
示例:
L = [1,3,5,7]
it = iter(L) # 用 L 来返回一个迭代器
next(it) # 返回1
next(it) # 返回3
next(it) # 返回5
next(it) # 返回7
next(it) # StopIteration 异常
# 内部实质是先获取迭代器,再用next从迭代器中获取数据
for x in L:
print(x)
示例:
# 将以上语句转为while语句实现
it = iter(L)
while True:
try:
print(next(it))
except StopIteration:
break
函数
iter(x) 从一个对象中返回迭代器(x必须是可迭代对象)
next(it) 从迭代器it中获取下一个记录,如果无法获取,则会触发StopIteration异常
iter用于生成器示例:
gen = range(1, 10, 3)
it = iter(gen)
next(it) # 1
next(it) # 4
next(it) # 7
next(it) # StopIteration
示例:
# 写一个生成器函数,生成0~n之间的偶数:
def myeven(n):
for i in range(0, n+1, 2):
yield i
for x in myeven(10):
print(x)
# 请问列表和myeven(n)的区别是什么?
L = [0, 2, 4, 6, 8, 10]
for x in L:
print(L)
总结:
生成器函数(可以返回生成器)
range()
可迭代对象 iterable(可以返回迭代器)
list, dict, str, tuple, set, frozenset
生成器 Generator (可以返回迭代器)
迭代器 iterator (可以用next函数访问可迭代对象的元素)
生成器表达式:
作用:
用推导式形式生成一个新的生成器
语法:
(表达式 for 变量 in 可迭代对象 [if 真值表达式])
注: if子句可以省略
示例:
gen = ( x**2 for x in range(1, 6, 2))
it = iter(gen)
next(it) # 1
next(it) # 9
next(it) # 25
next(it) # StopIteration
迭代工具函数
作用:
生成一个个性化的可迭代对象(生成器)
函数:
zip(iter1, iter2, ...) 返回一个zip对象,此对象用于生成元组,此元组的个数由最小的可迭代对象决定
enumerate(iterable ,start=0) 生成带索引的枚举对象,返回的迭代类型为索引-值对(index-value)对,默认索引从零开始,也可以用start指定
zip示例:
numbers = [10086, 10000, 10010, 95588]
names = ["中国移动", "中国电信", "中国联通"]
for x in zip(numbers, names):
print(x)
for x in zip(range(1,10000), numbers, names):
print(x)
def mynumerate(it, start=0):
for x in it:
yield (start, x)
start += 1
文件
什么是文件:
文件是用于数据存储的单位
文件通常用来长期保存数据
文件的打开(open)的关闭(close):
文件需要在使用时先打开才能读写
在不需要读写文件后,应及时关闭文件以释放系统资源
任何操作系统对打开的文件数有最大数限制
文件的打开函数open
open(文件路径, mode='r') 用于打开一个文件,返回此文件流对象,打开失败则会触发IOError错误!
文件关闭方法:
F.close() 关闭文件,释放系统资源
F 代表文件流对象
示例见:
open.py
文件的常用方法:
F 代表文件流对象
F.close() 关闭文件
F.readline() 读取一行数据,如果到达文件尾则返回空字符串
F.readlines(max_char=-1) 返回每行字符串列表, max_char为最大字符数
F.writelines(lines) 字符串列表的内容写到文件中
F.read(size=-1) 从一个文件流中最多读取size个字符(或字节(仅二进制))
F.write(text) 写一个字符串(或字节)到文件流中,返回写入字符数(或字节数)