你想實現乙個自定義迭代模式,跟普通的內建函式比如 range() , reversed() 不一樣。
如果你想實現一種新的迭代模式,使用乙個生成器函式來定義它。下面是乙個生產
某個範圍內浮點數的生成器:
def
frange
(start, stop, increment)
: x = start
while x < stop:
yield x
x += increment
為了使用這個函式,你可以用 for 迴圈迭代它或者使用其他接受乙個可迭代物件的
函式 (比如 sum() , list() 等)。示例如下:
>>
>
for n in frange(0,
4,0.5):.
..print
(n)...
00.5
1.01.5
2.02.5
3.03.5
>>
>
list
(frange(0,
1,0.125))
[0,0.125
,0.25
,0.375
,0.5
,0.625
,0.75
,0.875
]>>
>
乙個函式中需要有乙個 yield 語句即可將其轉換為乙個生成器。跟普通函式不同的是,生成器只能用於迭代操作。下面是乙個實驗,向你展示這樣的函式底層工作機制:
>>
>
defcountdown
(n):..
.print
('starting to count from'
, n)..
.while n >0:
...yield n..
. n -=1.
..print
('done!').
..>>
>
>>
> c = countdown(3)
>>
> c
>
>>
>
# run to first yield and emit a value
>>
>
next
(c)starting to count from33
>>
>
# run to the next yield
>>
>
next
(c)2
>>
>
# run to next yield
>>
>
next
(c)1
>>
>
# run to next yield (iteration stops)
>>
>
next
(c)done!
traceback (most recent call last)
: file ""
, line 1,in
stopiteration
乙個生成器函式主要特徵是它只會回應在迭代中使用到的 next 操作。一旦生成器
函式返回退出,迭代終止。我們在迭代中通常使用的 for 語句會自動處理這些細節,所
以你無需擔心。
00404 使用生成器建立新的迭代模式
你想實現乙個自定義迭代模式,跟普通的內建函式比如 range reversed 不一樣。生成器函式 usr bin env python deffrange stop,start 0,increment 1 x start while x stop yield x x increment for n...
使用生成器建立新的迭代器
實現乙個自定義的迭代模式,使其區別於常見的內建函式 range,reversed等 實現生成器 def frange start,stop,increment x start while x stop yield x x increment 迭代呼叫 for n in frange 1,10,0.5...
生成器模式 建立英雄
builder 為建立乙個product物件的各個部件定義指定的抽象方法,並提供乙個返回該product的方法。concretebuilder 實現builder的介面以構造和裝配該產品的各個部件。director 導演類,用於指導具體構建者如何構建產品,控制呼叫先後次序,並向呼叫者返回完整的產品類...