Python迭代器 閉包 裝飾器
阿新 • • 發佈:2018-11-30
迭代器:
可迭代物件:生成器(range)是Iterator 而list tuple dict set str是Iterable 把他們轉換成Iterator可以用iter()函式 可以用for進行迴圈取到 可以用next()進行取值
使用isinstance("xxx",Iterable) 判斷xxx是否是可以迭代
閉包:
def test():
pass
b=test
b()也指向test記憶體空間 ,可以呼叫test()
def test(number):
def test_in():
print number+100 #內部定義了一個方法並且呼叫了外部的變數 這種方式叫做閉包
return test_in
ret=test(100) # 此時ret指向test_in()
ret() #print 200
裝飾器:(語法糖)
def w1(func): def inner(): print "驗證階段" func() return inner def f1(): print "_____f1____" def f2(): print "______f2____" f1=w1(f1) f1() #這樣在沒有改變f1()呼叫的時候就能給每個被呼叫函式加上驗證程式碼
裝飾器方法
@w1 #這樣的方法等價於f1=w1(f1)
def f1():
print "_____f1____"
多個裝飾器的時候;
@w1
@w2 #先裝飾下面的w2 先把f1裝飾一遍成為新的f1 然後通過@w1再裝飾一遍成為又一個f1
def f1():
print "_____f1____"
python直譯器執行到@w1的時候就開始裝飾,而不是等到呼叫的時候裝飾
如果f1有引數 那麼裝飾方法的內部方法也必須有引數,內部引數對於外界引數的呼叫也需要有引數
不定長引數的話 上面新增引數的地方新增*arg,**args即可
當有被裝飾方法有返回引數的時候,需要在內部類呼叫函式的時候需要有返回值和return
通用裝飾器:
def func(functionName):
def func_in(*arg,**kwargs):
ret=functionName(*arg,**kwargs)
return ret
return func_in