美文网首页
装饰器一(理解):

装饰器一(理解):

作者: 在努力中 | 来源:发表于2018-05-16 11:20 被阅读0次

1、函数
2、装饰器,作用;修饰别的函数,给其他函数附加新的功能
原则:
1、不能修改被装饰函数的源码
2、不能改百年被装饰函数的调用方式
应用场景:
插入日志、性能测试、处理事务
理解:
1、函数即变量---也可以作为参数/返回值
2、高阶函数---以函数作为参数/返回值的函数
3、函数嵌套---函数里面定义函数
装饰器 = 高阶函数 + 嵌套函数

import time

# 1、函数--两数相加
def add(x,y):
    res = x+y
    return res

add1 = add         #函数即变量
print("函数即变量,add1 = ",add1(1,3))

print("add()值=%s" %(add(add1(1,1),1)))    #参数

# 2、装饰器---测试一个函数运行时间

# 被装饰函数
def f():
    print("i am f")
    time.sleep(1)

#运行时间
def new_f():
    start_time = time.time()    #开始时间
    f()                            #执行函数
    end_time = time.time()        #结束时间
    print("耗时%s秒" % (end_time - start_time))

# 执行
new_f()

# 改为装饰器格式
def my_time(func):                #参数 func 是一个函数
    start_time = time.time()    #开始时间
    func()                        #执行函数
    end_time = time.time()        #结束时间
    print("函数%s耗时%s秒" % (func.__name__,end_time - start_time)) #func.__name__是函数名,传入的参数
my_time(f)

# 装饰器

def my_time1(func):
    def warpper():        
        start_time = time.time()    
        func()                       
        end_time = time.time()       
        print("函数%s耗时%s秒" % (func.__name__,end_time - start_time))
    return warpper  #带括号 返回的是函数值,不带括号返回的是函数

n = my_time1(f)  # n是函数my_time1()的返回值,该返回值是函数warpper本身 ==
f = n
print("直接执行被装饰函数,就可以执行装饰器")
f()



def my_time2(func):
    def warpper():        
        start_time = time.time()    
        func()                       
        end_time = time.time()       
        print("函数%s耗时%s秒" % (func.__name__,end_time - start_time))
    return warpper  #带括号 返回的是函数值,不带括号返回的是函数

@my_time2#---简化了步骤  f_my_time2 = my_time2(f_my_time2)
def f_my_time2():
    print("i am f_my_time2")
    time.sleep(3)
f_my_time2()

相关文章

  • Python中的Decorator装饰器

    Decorator 装饰器 理解decorator(装饰器)的关键, 在于理解在python中函数是第一公民, 并...

  • 装饰器一(理解):

    1、函数2、装饰器,作用;修饰别的函数,给其他函数附加新的功能原则:1、不能修改被装饰函数的源码2、不能改百年被装...

  • 装饰器详解

    装饰器基本写法: 高级一点的装饰器 带参数的装饰器和类装饰器属于进阶的内容。在理解这些装饰器之前,最好对函数的闭包...

  • [JS函数] 方法 this

    函数 方法 新的东西: 多多理解一下this。 apply和装饰器好理解,apply用于指定this的指向,装饰器...

  • python 装饰器 补充

    重新理解python 装饰器 python 装饰器是一个函数,被装饰器所装饰的代码块最终也是一个函数这个对于一般的...

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • Python装饰器

    1. 什么是装饰器? 装饰器是一个用来装饰函数的函数。感觉有点拗口,那么,在我的理解,装饰器只是个辅助函数,有没有...

  • Python装饰器小谈

    近几日再次研究Python装饰器,对装饰器又有了新的理解和应用。如果这篇文章叫做小谈装饰器,不如重谈装饰器更来得亲...

  • 装饰器

    装饰器比较难理解,而我想的是记住其用法 一、函数装饰器 1、不带参数的函数装饰器,可以直接这样写: def dec...

  • Python - 学习理解带参数的装饰器

    理解带参数的装饰器 参考文章 Python精进-装饰器与函数对象 加了装饰器这段代码从一个函数定义(不会执行任何东...

网友评论

      本文标题:装饰器一(理解):

      本文链接:https://www.haomeiwen.com/subject/chhpdftx.html