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

python进阶:装饰器

时间:2019-10-16 21:41:49      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:装饰器   理解   进阶   start   返回值   闭包   str   ret   运行时   

 1.闭包

  简单理解:闭包就是多层函数的嵌套,外层函数的返回值是内层函数的引用。

def out_func(n):
    num = 100
    def in_fucn(*args,**kwargs):
     # nonlocal num
if n % 2 == 0: # 里面没有修改num的值,直接使用可以,如果变成 num += n 则会报错,因此需要使用前加上nonlocal num return n + num
       # return num += n
else: return n- num return in_fucn test = out_func(10) ret = test() print(ret) # 结果 110

 

 

  闭包的作用就是,装饰器

 2.装饰器

  简单的理解:就是不改变函数结构的情况下,给函数增加功能

def outter(func):

    def inner(*args,**kwargs):
        print("今天星期五")
        func(*args,**kwargs)
        print("下午我和,小红去吃烤鱼")
    return inner


def test(*args,**kwargs):
    print("今天天气很不错")

test = outter(test) # 标准写法
test() # 普通的调用了test函数,但是给函数上下都多打印了一行数字。

# 结果
今天星期五
今天天气很不错
下午我和,小红去吃烤鱼

 

   装饰器实现检测函数运行时间的功能

import time
def outter(func):

    def inner(*args,**kwargs):
        start_t = time.time()
        func(*args,**kwargs)
        end_t = time.time()
        print("函数test的运行时间为{}s".format(end_t-start_t))
    return inner


def test(*args,**kwargs):
    time.sleep(10)
    
test = outter(test)
test()

# 结果
函数test的运行时间为10.098577499389648s

 

 优雅的写法

import time
def outter(func):

    def inner(*args,**kwargs):
        start_t = time.time()
        func(*args,**kwargs)
        end_t = time.time()
        print("函数test的运行时间为{}s".format(end_t-start_t))
    return inner

@outter
def test(*args,**kwargs):
    time.sleep(10)

test()

# 结果
函数test的运行时间为10.000571966171265s

 

python进阶:装饰器

标签:装饰器   理解   进阶   start   返回值   闭包   str   ret   运行时   

原文地址:https://www.cnblogs.com/meloncodezhang/p/11688521.html

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