[python] python 生成器 简单讲解
个人并非开发出身,关于生成器的详细理论, 我觉得还是看看 这几位吧
https://blog.csdn.net/mieleizhi0522/article/details/82142856
# xrange 在 py3已经去除,就是 range, 减少了内存分配的资源消耗
另一个说明
https://blog.csdn.net/u013205877/article/details/70332612
关于 python 生成器 genal rator, 从浅入深的讲解
https://www.cnblogs.com/wj-1314/p/8490822.html
尤其推荐第三篇 ,博主是那种很有钻研精神的人,对很多细节都有说明。 里边谈到,只要可迭代对象,都可以用生成器,
s='hello' #字符串是可迭代对象,但不是迭代器
l=[1,2,3,4] #列表是可迭代对象,但不是迭代器
t=(1,2,3) #元组是可迭代对象,但不是迭代器
d={'a':1} #字典是可迭代对象,但不是迭代器
set={1,2,3} #集合是可迭代对象,但不是迭代器
# *************************************
f=open('test.txt') #文件是可迭代对象,是迭代器
#如何判断是可迭代对象,只有__iter__方法,执行该方法得到的迭代器对象。
# 及可迭代对象通过__iter__转成迭代器对象
from collections import Iterator #迭代器
from collections import Iterable #可迭代对象
print(isinstance(s,Iterator)) #判断是不是迭代器
print(isinstance(s,Iterable)) #判断是不是可迭代对象
#把可迭代对象转换为迭代器
print(isinstance(iter(s),Iterator))
def fib(n): n,a,b=0,0,1 while n< max: yield b a,b=b,a+b n=n+1 return 'done' a=fib(10) print(fib(10)) # print(a.__next__()) # 这种无法在 当前模式运行 list001=[x**3 for x in range(5)] list001 #(x**3 for x in range(5)) #list(x**3 for x in range(5))

浙公网安备 33010602011771号