1. 程式人生 > >叠代器和生成器,面向過程編程

叠代器和生成器,面向過程編程

ready 索引 tro 必須 bre OS 取值 for循環 場景

叠代器

叠代的工具,叠代是一個重復的過程,並且每次重復都是基於上一次結果而來

什麽是可叠代的對象和叠代器對象?

在python中,但凡內置有__iter__方法的對象,都是可叠代對象

可叠代對象執行__iter__方法的到的返回值就是叠代器對象

l=‘hello‘

iter_l=l_iter_()

while True:

try:

print(iter_l._next_())

except StopIteration:

break

叠代器對象:執行可叠代對象的__iter__方法,拿到的返回值就是叠代器

特點:內置有__next__方法,執行該方法會拿到叠代器對象中的一個值,內置__iter__方法,執行該方法會拿到叠代器本身

文件對象本身就是叠代器對象

for循環被稱為叠代器循環,in後跟的必須是可叠代的對象

l=‘hello‘

for iter in l:

print(iter)

叠代器的優點:1.提供了一種可以不依賴索引的取值方式

2.叠代器更加節省空間(因為它像一個老母雞 用一個給你下一個蛋)

缺點:取值麻煩而且只能取一個個值,只能往後取,並且是一次性的無法用len獲取長度

生成器

生成器本身就是叠代器

函數內只要包含有yield的關鍵字,在調用函數,就不會執行函數體代碼,拿到的返回值就是一個生成器對象

總結yield:為我們提供了一種自定義叠代器的方式,用以在函數內用yield關鍵字,調用函數拿到的結果就是一個生成器,生成器就是叠代器yield可以像return一樣用於返回值,區別是return只能返回一次值,而yield可返回多次因為yield可以保存函數執行的狀態

def eat(name):

print(‘%sready to eat‘%name)

while True:

food=yield

print(‘%s start to eat %s‘%(name,food))

dog1=eat(‘alex‘)

1.必須初始化一次,讓函數停在yield的位置

dog.__next__()

2.接下來的事,就是餵狗

send有兩方面的功能

(1)給yield傳值

(2)同__next__的功能

dog1.send(‘泔水‘)

面向過程編程

核心是‘過程’兩個字,過程即解決問題的步驟。即先幹什麽,再幹什麽~~~

基於面向過程寫程序就好比在設計一條流水線,是一種機械式的思維方式

優點:復雜問題流程化,進而簡單化

缺點:修改一個階段,其他階段都有可能需要做出修改牽一發而動全身,即擴展性極差應用

應用於擴展性要求低的場景

叠代器和生成器,面向過程編程