裝飾器,迭代器,生成器

2022-03-31 08:44:35 字數 2136 閱讀 3535

一、什麼是裝飾器

裝飾器本質就是函式,功能是為其他函式附加功能

二、裝飾器遵循的原則

1、不修改被修飾函式的源**

2、不修改被修飾函式的呼叫方式

三、實現裝飾器的知識儲備

裝飾器=高階函式+函式巢狀+閉包

高階函式,直接通過函式名呼叫,

#

!/usr/bin/env python

defbar():

print('

in the bar')

deftest1(func):

func()

test1(bar)

view code

實現bar()的執行時間,用test1來呼叫bar().計算bar()的執行時間,

#

!/usr/bin/env python

import

time

defbar():

time.sleep(3)

print('

in the bar')

deftest1(func):

start_time=time.time()

func()

stop_time=time.time()

print('

the func run time is %s

' %(stop_time-start_time))

#func=bar

#func() == bar()--->func()其實就是bar()

test1(bar)

view code

timer裝飾器的使用,

#

!/usr/bin/env python

import

time

def timer(func): #

timer(test1)

defdeco():

start_time=time.time()

func()

#run test1()

stop_time=time.time()

print('

the func run time is %s

' %(stop_time-start_time))

return

deco

@timer

deftest1():

time.sleep(1)

print('

in the test1')

#test1=timer(test1),,用@timer呼叫

test1()

view code

in the test1

the func run time is 1.0

傳入引數的裝飾器,

#

!/usr/bin/env python

import

time

deftimer(func):

def deco(*args,**kwargs):

start_time=time.time()

func(*args,**kwargs)

stop_time=time.time()

print('

the func run time is %s

' %(stop_time-start_time))

return

deco

@timer

deftest1():

time.sleep(1)

print('

in the test1')

@timer

deftest2(name,age):

print('

test2

',name,age)

test1()

test2(

'mark

','33

')

view code

in the test1

the func run time is 1.0

test2 mark 33

the func run time is 0.0

裝飾器,生成器,迭代器

裝飾器 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 方法用於返回容器中...