裝飾器、迭代器、生成器均屬於函式知識範疇
理解裝飾器,首先要了解閉包函式。
閉包函式:1、定義在函式內部的函式;
2、該函式的函式體**包含對外部作用域(而不是全域性作用域)名字的引用;
3、通常將閉包函式用return返回,然後可以任意呼叫。
eg:以下**中inner()即閉包函式
def outer():x=1def inner():
print(x)
return inner
f=outer()
裝飾器:即是一種閉包函式的應用。
什麼是裝飾器?:裝飾它人的器具,本身可以是任意可呼叫物件,被裝飾者也可以是任意可呼叫物件。
裝飾器的原則:1、不修改被裝飾物件的源** 2、不修改被裝飾物件的呼叫方式
裝飾器的目標:在遵循1和2的前提下,為被裝飾物件新增上新功能
importtime
deftimmer(func):
definner():
start=time.time()
res=func()
stop=time.time()
print('
run time is %s
' %(stop-start))
return
res
return
inner
@timmer
#index=timmer(index)
defindex():
time.sleep(1)
print('
welecome to index')
return 1111res=index()
print(res)
迭代器:迭代器即迭代的工具。
為什麼要有迭代器?:對於序列型別:str,list,tuple,可以依賴索引來迭代取值,但是對於dict,set,檔案,python必須為我們提供一種不依賴於索引的迭代取值的方式-》迭代器
什麼是可迭代物件?:可迭代物件指的是內建有__iter__方法的物件,即obj.__iter__,如下
'hello'.__iter__
(1,2,3).__iter__
[1,2,3].__iter__
.__iter__
.__iter__
open('a.txt').__iter__
什麼是迭代器物件?:可迭代物件執行obj.__iter__()得到的結果就是迭代器物件,而迭代器物件指的是即內建有__iter__又內建有__next__方法的物件
檔案型別是迭代器物件:
open('a.txt').__iter__()
open('a.txt').__next__()
注意:迭代器物件一定是可迭代物件,可迭代物件不一定是迭代器物件。
eg:
d=d_iter=iter(d)
#d_iter=iter(d)
while
true:
try:
(next(d_iter))
except
stopiteration:
break
優點:提供一種統一的、不依賴於索引的取值方式
迭代器同一時間在記憶體只有乙個值,更節省記憶體
缺點:只能往後取,並且是一次性的
不能統計值的個數,即長度
什麼是生成器?:只要在函式體內出現yield關鍵字,那麼再執行函式就不會執行函式**,會得到乙個結果,該結果就是生成器
生成器就是迭代器
deffunc():
print('
*****>1')
yield 1
print('
*****>2')
yield 2
print('
*****>3')
yield 3g=func()#
g.__iter__
res1=next(g)
(res1)
res2=next(g)
(res2)
res3=next(g)
print(res3)
yield的功能:
1、yield為我們提供了一種自定義迭代器物件的方法
2、yield與return的區別1:yield可以返回多次值 #2:函式暫停與再繼續的狀態是由yield幫我們儲存的
python基礎之迭代器生成裝飾器
容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中 也有一些特例,並不是所有的元素都放在記憶體,比如迭代器和生成器物件 在python中,常見的容器物件有 容器比較容易理解,因為...
python之裝飾器的概念
裝飾器對於程式來說雖然不是必要的,但有時候卻可以提高效率,也可以保證程式的安全。說裝飾器之前需要掌握閉包,前面一篇文章已經介紹過,這裡不再重複。那麼,裝飾器到底是什麼東西呢?看下面這個例子 首先定義了乙個函式 num,然後a b c d四個人都呼叫了這個函式。現在,a想對函式num的功能進行擴充套件...
Python高階迭代器和裝飾器
python高階迭代器和裝飾器 一 迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的對 象。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結 束。迭代器只能往前不會後退。1 可迭代物件 一類是集合資料型別,如 list tuple dict set str 等 一...