python生成器、迭代器、裝飾器
最簡單的生成器:
g = (x*x for x in range(10))
for i in g:
print i
函式方法實現稍複雜的生成器:
def fib(max):
n,a,b=0,1,1
while n在迴圈過程中不斷呼叫yield,就會不斷中斷,通常基本不用next()來呼叫,而是直接使用for迴圈。
迭代器是乙個next()方法的物件,而不是通過索引來計數。
建立迭代器:對乙個物件呼叫iter()函式就可以得到它的迭代器,它的語法如下:
iter(obj)
iter(func,sentinel)
mytuple=(1,2,3)
i=iter(mytuple)
print i.next()
print i.next()
print i.next()
字典的迭代器會遍歷它的鍵(key),一種比較簡潔的方法如下:
legends =
for i in legends:
print i
print legends[i]
檔案物件生成的迭代器會自動呼叫readline()方法,一種簡潔的實現方法如下:
myfile = open('a.txt')
for eachline in myfile:
print eachline
基本概念:在函式呼叫前後自動列印日誌,又不改變原函式,在**執行期間動態增加功能的方式稱之為「裝飾器」。
裝飾器的語法已@開頭,接下來是裝飾器函式的名字和可選的引數,緊跟著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。
decorator(dec_opt_args)比較常用的地方:def func2bdecorated(func_opt_args):
1、引入日誌
2、增加計時邏輯來檢測效能
3、給函式加入事務的能力
def log(func):
print 'call %s():' % func.__name__
return func(*args, **kw)
@log
def now():
裝飾器 生成器
裝飾器主要用於程式功能的一些擴充套件。由於在python中,函式名 不帶括號 也是一種變數名,可以像賦值一樣給另外乙個變數。這就導致了裝飾器這種玩法。其實函式名就是儲存著函式的位址,因此,可以把這個位址賦值給另外乙個變數,與c語言中的指標基本一樣,同時與python列表的引用也是相像的。不附加新引數...
PHLK 生成器 裝飾器
def printf nums for num in nums print num is d num yield num defadder nums for num in nums print adding d num if num 2 0 yield num 1else yield num 2nu...
裝飾器,生成器,迭代器
裝飾器 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...