zoukankan      html  css  js  c++  java
  • python装饰器

    1、装饰器简介

    装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。

    装饰器的特点

    • 本质是函数,为了其它函数添加附加功能。
    • 不能修改被装饰的函数的源代码。
    • 不能修改被装饰的函数的调用方式

    二、实现装饰器知识必备技

    1. 函数即“变量”
    2. 高阶函数

      把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码下为其添加功能)

      返回值中包含函数名(不修改函数的调用方式)

    3.嵌套函数
    高阶函数 +嵌套函数=》装饰器
     
    2.1函数即“变量”(一切皆对象)
    在 python中,一切皆对象,变量是对象,函数是对象,类是对象,所有的一切都是对象。
    '''
    定义函数ttest1,于是内存中就开辟属于test1的内存空间,写入test1的函数功;
    随后在解释器上输入test1函数的函数名,这时会返回一串指针地址,在python中所有的对象都会对应的指针地址,即指向内存中func函数的位置;
    如果在func函数名后加上(),这就说明test1根据指针地址调用了test1函数
    '''
    def test1():
        print("in the test1")
    print(test1)
    test1()
    
    #执行结果
    <function test1 at 0x00000261F0F43E18>
    in the test1

     

    2.2高阶函数
    变量可以指向函数,函数的参数能接受变量,接受函数为参数,或者把函数作为结果返回的函数是高阶函数。
    # 定义test2函数有x,y,f三个参数,执行test2函数时将实参abs传形参f,test2函数最后return两数的绝对值和:
    def test2(x,y,z):
        return z(x) + z(y)
    print(test2(1,-7,abs))
    
    # 执行结果
    8
     

    2.3嵌套函数
    嵌套函数就是在一个函数内声明一个函数再调用。

    def test3():
        print("in the test3")
        def test4():
            print("in the test4")
        test4()
    test3()
    
    #执行结果
    in the test3
    in the test4
    实现一个简单的装饰器
    在不改变foo函数的源代码,输出该函数的运行时间
    def clock(func):
        def wrapper():
            start_time = time.time()
            res = func()
            end_time = time.time()
            print("running time:%s" % (end_time - start_time))
            return res
        return wrapper
    
    @clock  # clock 等于foo = clock(foo)
    def foo():
        time.sleep(2)
        print("in the foo.")
    
    foo()
    #运行结果
    in the foo.
    running time:2.0007948875427246
     
  • 相关阅读:
    datetime模块
    time模块
    shelve模块
    json&pickle 序列化
    re正则
    MQ常用命令
    MQ for linux安装与卸载【转】
    Linux下安装Oracle11g服务器【转】
    PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)[转]
    [LeetCode]:116:Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/wenwei-blog/p/7374716.html
Copyright © 2011-2022 走看看