7.疊代器和生成器差別
疊代器是一個抽象概念,任何對象,它的next方法和iter方法傳回自己本身。iter是内置函數,iter()會傳回一個定義了next方法的疊代器對象,
class MyNumbers:
def iter(self):
self.a = 1
return self
def next(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
生成器是建立得帶去簡單而強大的工具寫起來就像正規函數,在傳回資料是使用yield語句,每次next()被調用,生成器會傳回它脫離的位置
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函數 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個疊代器,由生成器傳回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
8.裝飾器
在不改變原來的代碼基礎上,添加新的功能
作用1.引用日志
2。函數執行時間統計
3.執行函數前預備處理
4.緩存
5.權限校驗#coding:utf-8
import time
def decorate(func):
a = 1
def warp():
start_time = time.time()
print(a)
func()
end_time = time.time()
print(end_time-start_time)
return warp
@decorate
def function():
time.sleep(1)
function()