天天看點

python疊代器生成器和裝飾器

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()