首页 > 编程语言 > 详细

python基础(第13天)--迭代器与生成器

时间:2019-02-17 17:35:04      阅读:125      评论:0      收藏:0      [点我收藏+]

1、迭代器:

# 可迭代协议:含有双下方法__iter__()
# 迭代器协议:同时含在双下方法__iter__()和__next__()
# 可迭代不一定是迭代器,但迭代器一定可迭代
# 目前所学的可迭代的类型:list/tuple/dict/set/str/range()/enumerate/f
# 迭代器的作用:1>方便取值,无需关心顺序及索引;2>节约内存空间
# 迭代器的生成:可迭代对象调用__iter__()方法,得到一个迭代器
# l = [1, 2, 3, 4]
# ret = l.__iter__()
# print(ret) # <list_iterator object at 0x000001E8761127B8>

# l = [1, 2, 3, 4]
# for i in l:
# print(i)
#
# for i in l.__iter__():
# print(i)
# 上面效果一样,是因为for循环会自动将l转化为迭代器对象,只要可迭代,就可以用for循环

2、生成器:
# 只要函数内部包含关键字yield,则为生成器方法
# yield与return的区别:return返回结果后直接结束函数,而yield返回结果后并没有结束,下面语句可以继续执行
# 生成器本质上是迭代器

# def generator():
# print(1)
# return "a"
#
# g = generator()
# print(g) # 1 a

# def generator():
# print(1)
# yield "a"
#
# g = generator()
# print(g) # <generator object generator at 0x000001D84601B8B8>
# # 从以上可以看出,执行generator()后并没有执行函数内部代码,而是直接返回了一个生成器对象,要执行内部代码,必须调用__next__()方法
# ret = g.__next__()
# print("***", ret) # 1 *** a

# def generator():
# print(1)
# yield "a"
# print(2)
# yield "b"
#
# g = generator()
# print(g.__next__()) # 1 a
# print(g.__next__()) # 2 b
# 从以上可以看出,同一个生成器,调用__next__()方法可以继续执行,而不是从头再来执行
#也可用for循环
# for i in g:
# print(i)

# 娃哈哈%i
def wahaha():
for i in range(2000000):
yield "娃哈哈%d" % i

g = wahaha()
# print(g.__next__()) # 娃哈哈0
# for i in g:
# print(i) # 生成一个打印一个,节省了空间

# 如果只想打印前50个
count = 0
for i in g:
count += 1
print(i)
if count > 50:
break

# 如果想从51开始打印50个
for i in g:
count += 1
print(i)
if count > 100:
break
# 同样不会从0开始打印
3、监听文件输入的例子:
 1 # def tail(filename):
 2 #     f = open(filename, encoding="utf-8")
 3 #     while True:
 4 #         ret = f.readline()
 5 #         if ret.strip():
 6 #             print(ret.strip())
 7 #
 8 # tail("file")  # 这样虽然可以实现监听,但是如果要对监听的内容进行处理,就办不到了
 9 
10 
11 # def tail(filename):
12 #     f = open(filename, encoding="utf-8")
13 #     while True:
14 #         ret = f.readline()
15 #         if ret.strip():
16 #             yield ret.strip()
17 #
18 #
19 # r = tail("file")
20 #
21 # for i in r:
22 #     print(i)
23 
24 # def tail(filename):
25 #     f = open(filename,encoding=‘utf-8‘)
26 #     while True:
27 #         line = f.readline()
28 #         if line.strip():
29 #             yield line.strip()
30 #
31 # g = tail(‘file‘)
32 # for i in g:
33 #     # if ‘python‘ in i:
34 #     #     print(‘***‘,i)
35 #     print(i)

 

python基础(第13天)--迭代器与生成器

原文:https://www.cnblogs.com/eric818/p/10391806.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!