python 生成器新知

python 生成器一直用的比较少,今天学习深入理解迭代器和生成器,有了新的体会。这里整理一下。
首先需要区分一下可迭代对象,迭代器,生成器。
iter()方法可以判断一个对象是否可以迭代,也可以通过isinstance(obj, Iterable)来判断

def is_iterable(obj):
	try:
		iter(obj)
		return True
	except TypeError:
		return False

这里除了数字,其他的例如字典,列表,元组,集合,字符串都是可迭代对象。
迭代器有一个next方法,而且迭代器调用只能用一次。除非重新构造,next取出的数据之后是无法再使用的。

def is_subsequence(a, b):
	b = iter(b)
	print(b)
	gen = (i for i in a)
	print(gen)
	for i in gen:
		print(i)
	gen = ((i in b) for i in a)
	print(gen)
	for i in gen:
		print(i)
	return all(((i in b) for i in a))
print(is_subsequence([1,3,5],[1,2,3,4,5]))
print(is_subsequence([1,5,3],[1,2,3,4,5]))

这里(i in b) 等价于

while True:
	val = next(b)
	if val == i:
		return True

next函数运行的时候,保存了当前的指针。

b = (i for i in range(5))
print(2 in b)
print(4 in b)
print(3 in b)
发布了199 篇原创文章 · 获赞 62 · 访问量 21万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览