叠代器和生成器,面向過程編程
叠代器
叠代的工具,叠代是一個重復的過程,並且每次重復都是基於上一次結果而來
什麽是可叠代的對象和叠代器對象?
在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(‘泔水‘)
面向過程編程
核心是‘過程’兩個字,過程即解決問題的步驟。即先幹什麽,再幹什麽~~~
基於面向過程寫程序就好比在設計一條流水線,是一種機械式的思維方式
優點:復雜問題流程化,進而簡單化
缺點:修改一個階段,其他階段都有可能需要做出修改牽一發而動全身,即擴展性極差應用
應用於擴展性要求低的場景
叠代器和生成器,面向過程編程