Python高階 生成器(Generators)

2021-09-25 19:14:58 字數 1418 閱讀 5839

迭代器是乙個讓程式設計師可以遍歷乙個容器(特別是列表)的物件。然而,乙個迭代器在遍歷並讀取乙個容器的資料元素時,並不會執行乙個迭代。—— 維基百科

可迭代物件(iterable)

python中任意的物件,只要它定義了可以返回乙個迭代器的iter方法,或者定義了可以支援下標索引的getitem方法(這些雙下劃線方法會在其他章節中全面解釋),那麼它就是乙個可迭代物件。簡單說,可迭代物件就是能提供迭代器的任意物件。那迭代器又是什麼呢?

迭代器(iterator)

任意物件,只要定義了next(python2) 或者next方法,它就是乙個迭代器。就這麼簡單。現在我們來理解迭代(iteration)

迭代(iteration)

用簡單的話講,它就是從某個地方(比如乙個列表)取出乙個元素的過程。當我們使用乙個迴圈來遍歷某個東西時,這個過程本身就叫迭代。現在既然我們有了這些術語的基本理解,那我們開始理解生成器吧。

乙個計算斐波那契數列的生成器

def fibon(n):

a = b = 1

for i in range(n):

yield a

a, b = b, a + b

不使用生成器的方式和生成器相比會更加浪費記憶體,在計算很大的輸入引數時,會用盡所有的資源。

def fibon(n):

a = b = 1

result =

for i in range(n):

a, b = b, a + b

return result

def generator_function():

for i in range(3):

yield i

gen = generator_function()

print(next(gen))

# output: 0

print(next(gen))

# output: 1

print(next(gen))

# output: 2

print(next(gen))

# output: traceback (most recent call last):

# file "", line 1, in # stopiteration

內建函式 iter 可以根據乙個可迭代物件返回乙個迭代器物件。

my_string = "yasoob"

my_iter = iter(my_string)

next(my_iter)

# output: 'y'

生成器高階

def generator print 123 count yield 1 print count print 456 yield 2g generator ret g.next print ret ret g.send 套你大象 send的效果與next一樣 send在獲取下乙個值時,會在上乙個y...

Python高階篇 生成器

python中有很多方便遍歷的資料結構。這些結構都是iterable物件。主要包括一下集中 集合資料型別 list tuple dict set str等 和生成器 generator 集合資料型別對於大家應該不是難題,這裡重點來 一下generator這個有點複雜的迭代物件。首先來看一下如何生成g...

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...