生成器:
a.可以看成是一個(gè)可以存儲(chǔ)多個(gè)數(shù)據(jù)的容器。需要里面的數(shù)據(jù)的時(shí)候,就生成一個(gè)。
里面的數(shù)據(jù)只能從前往后一個(gè)一個(gè)的生成,不能跳躍,也不能從后往前。而且生成厚度數(shù)據(jù),不能二次生成。
b.獲取生成器里面的數(shù)據(jù),需要使用_next_()方法
c.只要函數(shù)聲明中有yield關(guān)鍵字,函數(shù)就不再是一個(gè)單純的函數(shù),而變成一個(gè)生成器
和列表比較:
列表存數(shù)據(jù),數(shù)據(jù)必須是實(shí)實(shí)在在存在的數(shù)據(jù),一個(gè)數(shù)據(jù)會(huì)占一定的內(nèi)存空間。
生成器存數(shù)據(jù),存的是產(chǎn)生數(shù)據(jù)的算法。沒(méi)有數(shù)據(jù)去占內(nèi)存空間。
# 1,1,2,3,5,8,13,21....
def fle(n):
pre_1 = 1
pre_2 = 1
for x in range(1, n + 1):
if x == 1 or x == 2:
current = 1
# print(current)
yield current
continue
current = pre_1 + pre_2
pre_1, pre_2 = pre_2, current
# print(current)
yield current
xulie = fle(10)
print(xulie.__next__())
print(xulie.__next__())
print(xulie.__next__())
for x in xulie:
print('==', x)
if __name__ == '__main__':
list1 = list(i for i in range(10))
x = (i for i in range(10))
# x就是一個(gè)生成器,用來(lái)產(chǎn)生數(shù)據(jù)
print(x)
print(x.__next__())