裝飾器:
器:代表函式
裝飾:裝飾其他函式
裝飾器原則:
不能修改被裝飾函式的源**
不能修改被裝飾函式的呼叫方式
實現裝飾器:
1 函式即變數 (匿名函式沒有函式名,使用完就會被**)
2 高階函式
a:把乙個函式名當做實參傳給另外乙個函式
b:返回值中包含函式名
3 巢狀函式
a:在函式體內用def宣告乙個函式
4 閉包:函式接受的引數可以傳遞給內嵌函式裡
乙個簡單的裝飾器:
deftimer(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傳值
生成器的例子:
importtime
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 方法用於返回容器中...