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 nyield b
a,b=b,a+b
n +=1
for n in fib(6):
print 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):
def(*args, **kw):
print
'call %s():' % func.__name__
return func(*args, **kw)
@log
defnow
():print
'2013-12-25'
python 裝飾器,生成器,迭代器
示例1 無參無返回值 def shuai func 示例2 帶參函式的裝飾器 帶參函式的裝飾器 示例3 帶參有返回值的裝飾器 def zhuangshiqi func 資料量非常小,記憶體占用不大 l i for i in range 10 資料量特別大時,會造成記憶體占用突然增大 l2 i for...
Python裝飾器,迭代器,生成器
1.python裝飾器 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。所有函式都有乙個 name 屬性,這樣我們就可以那到函式名。現在,假設我們要增強now 函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now 函式的定義,這種在 執行期間動態增加功...
Python生成器,迭代器,裝飾器
使用了yield函式就被稱之為生成器,生成器是乙個返回迭代器的函式,說白了生成器就是迭代器,只能用於迭代操作 不懂,沒關係,下面就乙個斐波那契數列為例來進行講解 a,b 0,1while a 100 a,b b,a b print a import sys deffibonacci n 生成迭代器函...