生成器 迭代器 裝飾器

2021-09-03 07:57:18 字數 953 閱讀 8645

迭代器表面上看是乙個資料流物件或者容器,當使用其中的資料時,每次從資料流中取出乙個資料,直到資料被取完,而且資料不會被重複使用。從**的角度來看,迭代器是實現了迭代器協議方法的物件和類。迭代器協議方法主要是兩個:

iter()#該方法返回物件本身,它是for語句使用迭代器的要求

next()#方法用於返回容器中下乙個元素或者資料。當容器中的資料用盡時,應該引發stopiteration異常

生成器(generator)是建立迭代器的簡單而強大的工具。它們寫起來就像是正規的函式,只是在需要返回數

據的時候使用 yield 語句。每次 next()被呼叫時,生成器會返回它脫離的位置

裝飾器本質上是乙個 python 函式,它可以讓其他函式在不需要做任何**變動的前提下增加額外

功能,裝飾器的返回值也是乙個函式物件。

import time

def timeit(func):

start = time.clock()

func() end =time.clock()

print 'used:', end - start

@timeit

def foo():

print 'in foo()'foo()

在函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼將這個函式以及用到的一些變數稱之為閉包

區別:生成器能做到迭代器能做的所有事,而且因為自動建立了 iter()和 next()方法,生成器顯得特別簡潔,而且

生成器也是高效的,使用生成器表示式取代列表解析可以同時節省記憶體。除了建立和儲存程式狀態的自動方法,當發生器終結時,還會自動丟擲 stopiteration 異常。

裝飾器,生成器,迭代器

裝飾器 import time def show time func def inner x start time time.time func x end time time.time print end time start time return inner show time def add...

迭代器 生成器 裝飾器

1.迭代器 1 定義 同時滿足 iter 方法和next 方法的物件就是迭代器。3 型別 可迭代物件通過iter 轉為迭代器 生成器是一種特殊的迭代器。2.生成器 1 定義 生成器是迭代器的一種,包括含有yield關鍵字函式和生成器表示式。2 用法 所有函式呼叫的引數都是第一次呼叫時保留的,而不是新...

生成器 裝飾器 迭代器

列表生成器 def f n return n 3 a f x for x in range 100 print a print type a 生成器 生成器一共兩種建立方式 1.x for i in range 0 2.yield 生成器在建立的時候已經決定了能計算出值的個數,呼叫next的次數超過...