Python概念之裝飾器 迭代器 生成器

2022-09-11 23:00:40 字數 2307 閱讀 6402

裝飾器、迭代器、生成器均屬於函式知識範疇

理解裝飾器,首先要了解閉包函式。

閉包函式:1、定義在函式內部的函式;

2、該函式的函式體**包含對外部作用域(而不是全域性作用域)名字的引用;

3、通常將閉包函式用return返回,然後可以任意呼叫。

eg:以下**中inner()即閉包函式

def outer():

x=1def inner():

print(x)

return inner

f=outer()

裝飾器:即是一種閉包函式的應用。

什麼是裝飾器?:裝飾它人的器具,本身可以是任意可呼叫物件,被裝飾者也可以是任意可呼叫物件。

裝飾器的原則:1、不修改被裝飾物件的源** 2、不修改被裝飾物件的呼叫方式

裝飾器的目標:在遵循1和2的前提下,為被裝飾物件新增上新功能

import

time

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:

print

(next(d_iter))

except

stopiteration:

break

優點:提供一種統一的、不依賴於索引的取值方式

迭代器同一時間在記憶體只有乙個值,更節省記憶體

缺點:只能往後取,並且是一次性的

不能統計值的個數,即長度

什麼是生成器?:只要在函式體內出現yield關鍵字,那麼再執行函式就不會執行函式**,會得到乙個結果,該結果就是生成器

生成器就是迭代器

def

func():

print('

*****>1')

yield 1

print('

*****>2')

yield 2

print('

*****>3')

yield 3g=func()#

g.__iter__

res1=next(g)

print

(res1)

res2=next(g)

print

(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 等 一...