Python 學習之迭代器與生成器

迭代器

迭代是 Python 最強大的功能之一,是訪問集合元素的一種方式。現在正式進入主題:

  • 迭代器,迭代器是一個可以記住遍歷的位置的對象。
  • 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
  • 迭代器有兩個基本的方法:iter() 和 next()。
  1. 實例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 1、字符創創建迭代器對象
str1 = 'liangdianshui'
iter1 = iter ( str1 )

# 2、list對象創建迭代器
list1 = [1,2,3,4]
iter2 = iter ( list1 )

# 3、tuple(元祖) 對象創建迭代器
tuple1 = ( 1,2,3,4 )
iter3 = iter ( tuple1 )

# for 循環遍歷迭代器對象
for x in iter1 :
    print ( x , end = ' ' )

print('\n------------------------')

# next() 函數遍歷迭代器
while True :
    try :
        print ( next ( iter3 ) )
    except StopIteration :
        break
  1. 結果:
l i a n g d i a n s h u i 
------------------------
1
2

生成器

在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。

跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。

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

調用一個生成器函數,返回的是一個迭代器對象。

  1. 實例
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

s = (x * x for x in range(5))
print(s)
for x in s:
    print(x)

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

f = fib(10)
print('fib(10):', f)
for x in f:
    print(x)

# call generator manually:
g = fib(5)
while 1:
    try:
        x = next(g)
        print('g:', x)
    except StopIteration as e:
        print('Generator return value:', e.value)
        break
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章