裝飾器,生成器,迭代器

2022-05-03 15:48:18 字數 1921 閱讀 6993

裝飾器:  

器:代表函式

裝飾:裝飾其他函式

裝飾器原則:

不能修改被裝飾函式的源**

不能修改被裝飾函式的呼叫方式

實現裝飾器:

1 函式即變數 (匿名函式沒有函式名,使用完就會被**)

2 高階函式

a:把乙個函式名當做實參傳給另外乙個函式

b:返回值中包含函式名

3 巢狀函式

a:在函式體內用def宣告乙個函式

4 閉包:函式接受的引數可以傳遞給內嵌函式裡

乙個簡單的裝飾器:

def

timer(func):

def test2(*args): #

可變引數能接收不一樣的環境

start_time =time.time()

func(*args)

end_time =time.time()

print("

時間間隔是: --> %s

" % (end_time -start_time) )

return

test2    # 返回的一定是函式名, 不能帶(), 否則會出錯

@timer

deftest1():

time.sleep(3)

print('

in test1

')

用法:在要被裝飾的函式前加上@裝飾器名, 這句話相當於test1 = timer(test1)

列表生成式:

[ i*i for i in range(10) ]

生成器:

分為列表生成器和函式生成器

注意, 生成器只能迭代一次, 使用完了就完了, 在處理超大資料的時候合適

列表生成器:

將列表生成器的中括號換成小括號

( i*i for i in range(10) )

與list的區別;

呼叫時候才生成, 特別快, 不使用不佔記憶體

不支援切片

只記錄當前位置, __next__()方法

函式生成器:

yield:返回乙個值, 此時程式等待下次呼叫, 處於掛起狀態

send:可以給yield傳值

生成器的例子:

import

time

defconsumer(name):

print("

ready for beef")

while

true:

beef = yield

print("

beef %s comes, eaten by %s

" %(beef, name))

defproducer(name):

c1 = consumer('a'

) c2 = consumer('b'

) c1.

__next__

() c2.

__next__

()

print("

doing meet beef")

for i in range(3):

time.sleep(1)

print("

1 beef made, 2 copule")

c1.send(i)

c2.send(i)

producer(

"hinimix

")

迭代器:

生成器是迭代器(iterator), list,dict,str是可以迭代的, 但是不是迭代器

迭代器轉換iter()

注意凡是可作用與for迴圈的都是iterable型別

凡是可作用於next()函式的物件都是iterator型別,

裝飾器,生成器,迭代器

裝飾器 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...

迭代器 生成器 裝飾器

1.迭代器 1 定義 同時滿足 iter 方法和next 方法的物件就是迭代器。3 型別 可迭代物件通過iter 轉為迭代器 生成器是一種特殊的迭代器。2.生成器 1 定義 生成器是迭代器的一種,包括含有yield關鍵字函式和生成器表示式。2 用法 所有函式呼叫的引數都是第一次呼叫時保留的,而不是新...

生成器 迭代器 裝飾器

迭代器表面上看是乙個資料流物件或者容器,當使用其中的資料時,每次從資料流中取出乙個資料,直到資料被取完,而且資料不會被重複使用。從 的角度來看,迭代器是實現了迭代器協議方法的物件和類。迭代器協議方法主要是兩個 iter 該方法返回物件本身,它是for語句使用迭代器的要求 next 方法用於返回容器中...