python基礎:迭代器與生成器

一、迭代器

迭代器只能向前訪問,不能後退
字典,列表,元組,字符串,range都是可以迭代的對象。

1、創建迭代器

`dict={1:3,2:4,3:5,4:6}
key = iter(dict)
print(key)
print(next(key))
print(next(key))

values = iter(dict.values())
print(values)
print(next(values))
print(next(values))

list= [1, 2, 3, 4, 5]
list2 = iter(list)
print(list2)
print(next(list2))
print(next(list2))
print(next(list2))
print(next(list2))

ranges = iter(range(1, 10))
print(ranges)
print(next(ranges))
print(next(ranges))
print(next(ranges))`
運行結果:

<dict_keyiterator object at 0x00523870>
1
2
<dict_valueiterator object at 0x005238A0>
3
4
<list_iterator object at 0x00405B30>
1
2
3
4
<range_iterator object at 0x004F3A10>
1
2
3

2、讀取迭代器:
#for遍歷

    list= [1, 2, 3, 4, 5]
    for i in iter(list):
        print(i)

next()遍歷:

 while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

二、生成器
使用了yield的函數稱爲生成器(generater).對於非常巨大的數了列表非常有用,一次讀取一個元素,節省內存資源。
生成器用於不知道會生成多大數據的場景,每生成一個數據返回一次
跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是迭代器。

       在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回yield的值。並在下一次執行 next()方法時從當前位置繼續運行。

下面代碼正常是死循環,但是使用yield以後,只在用next()方法,纔會運行一次。

def gena(i=2):
    while True:
        i = i * 2 - 1
        yield i

運行:

l = gena(2)
print(l)
print(next(l))
print(next(l))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章