生成器,迭代器和裝飾器
阿新 • • 發佈:2018-11-22
1.生成器
解析器在實時生成資料,資料不會駐留在記憶體中。因此,其執行效率很高!
yield 是一個類似 return 的關鍵字,只是這個函式返回的是個生成器
當你呼叫這個函式的時候,函式內部的程式碼並不立即執行 ,這個函式只是返回一個生成器物件
當你使用for進行迭代的時候,函式中的程式碼才會執行
- 推導式建立生成器:
list1 = (i**2 for i in range(10) if i%2==0)
for item in list1:
print(item)
- yield方式
def createGenerator(): for i in range(10): if i%2==0: yield i**2 myGenerator = createGenerator() for item in myGenerator: print(item)
2.迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的物件。
迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表、元組和字典物件都可用於建立相應的迭代器
list1 = [2,3,4,56,78]
iter1 = iter(list1)
while True:
try:
print(next(iter1))
except StopIteration:
break
3.生成器是特殊的迭代器:
list1 = (i**2 for i in range(10) if i%2==0)
print(next(list1))
print(next(list1))
#結果為 0 4
4.裝飾器
裝飾器是個函式,用於日誌、事務、許可權等的程式設計(AOP:面向切面程式設計),是非侵入式的程式設計方式
def loginfo(func): print("---------------") def wrapper(): print("那誰登陸了我們的系統") func() print("那誰登陸了我們的系統") return wrapper @loginfo def login(): print("歡迎誰誰誰登陸") pass