[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))

 
一小段练习代码,jupyter notebook 上测试的 
 
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))

 

posted @ 2019-01-14 11:44  allen514519  阅读(79)  评论(0)    收藏  举报