對迭代器,生成器,yield的備忘

2021-08-10 07:06:03 字數 682 閱讀 1114

1.裝飾器

裝飾器相當於乙個閉包,可以從函式中抽取大量與功能無關的**放在裝飾器函式中,裝

飾器函式和被裝飾函式都可以接受引數,

def zhuangshiqi(abc):

def _zhuang(foo):    由於裝飾器函式接收引數所以多加乙個函式

print u'我是裝飾器'

print abc

foo(*args,**kwargs)

return _zhuang

@zhuangshiqi(abc='abc')

def a(num1,num2):

print num1+num2

2.迭代器和生成器

聯絡:兩者都是可以記錄狀態,通過next()方法呼叫下乙個,惰性載入(所以可以用來處理無限數

列不必擔心像列表那樣記憶體會被撐爆)不可重用,節省記憶體。呼叫一般通過for迴圈呼叫實

例物件,避免內容全部迭代完後報錯

區別:生成器是使用yield建立的

迭代器可以使用iter(可迭代物件)或者自建類實現__iter__和__next__方法這兩種方式建立

生成器更加簡單

3.yield

有yield的函式可以理解為是乙個生成器,yield和return做對比的話好理解,return 返回

乙個值並終結當前函式,yield返回乙個值,函式繼續執行

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...

迭代器,生成器

迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...

迭代器 生成器

迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...