码迷,mamicode.com
首页 > 编程语言 > 详细

python3 装饰器

时间:2018-02-24 22:01:11      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:war   闭包函数   python   传参   end   div   def   防止   开放封闭原则   

python3 装饰器

一、闭包

闭包的两个条件:函数内套有内层函数;内层函数引用外层函数定义的变量。

eg:

def outer():

    x=10

    def inner():

    print(x)

    return inner

二、装饰器

装饰器是为了在不改变原先函数源码的前提下,增加功能而存在的。执行流程:在调用被装饰器修饰的函数时,装饰器会先被调用,将被装饰函数的函数名传入装饰器函数,执行装饰器内层函数,内层函数会调用被装饰函数,从而实现被装饰函数的执行,而增加的功能在内层函数里写着,所以增加的功能也实现了。这样做的好处是,被装饰的函数的调用方法不变,从而防止牵一发而动全身的现象出现;没有改变被装饰函数的源码,符合开放封闭原则。

注意,装饰器函数必须是闭包函数。

eg:

装饰器函数:

import time
def show_time(f):
    def inner(*args,**kwargs):      #设定不定长参数,防止被装饰函数有参数
        start_time=time.time()
        f(*args,**kwargs)
        time.sleep(3)
        end_time=time.time()
        print(‘spend_time=%s‘%(end_time-start_time))
    return inner()

 

@show_time
def foo():           #被装饰器修饰的函数
    print(‘ok‘)

foo()#调用函数

如果需要向装饰器函数中传参则在装饰器函数外围在套一层外部函数。

eg2:

def outer(*args):

    def show_time(f):

          def inner(*args,**kwargs):

               pass

         return inner

return show_time

 

@outer(‘参数’)

def foo ():

    pass

 

foo()#调用函数

python3 装饰器

标签:war   闭包函数   python   传参   end   div   def   防止   开放封闭原则   

原文地址:https://www.cnblogs.com/xshan/p/8467515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!