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

    顾名思义,装饰器其实就是给一个函数加一些修饰功能,为什么不直接改函数源码呢?因为对于某些复杂的函数你没有耐性去阅读了,所以python提供了装饰器这个功能


    ## 闭包

    闭包是指定义在一个函数内的函数,且调用了外部变量或对象,但不能是全局变量。

    def outer():
        a = 1
        def inner():
            b = 2
            return a + b
        return inner
    
    func = outer()
    func()
    

    装饰器本身也是一个函数,返回一个函数对象指针。

    def decorator(func):
        def wrapper(*args, **kwargs):
            start = time.time()
            func()
            end = time.time()
            print(end - start)
        return wrapper
    
    @decorator
    def func():
        time.sleep(1)
    
    func()
    

    @语句实质上等于func = decorator(func)


    ## 装饰链
    def makediv(func):
        return lambda: '<div>' + func() + '</div>'
    
    def makep(func):
        return lambda: '<p>' + func() + '</p>'
    
    @makediv
    @makep
    def func():
        return "Hello world."
    
    func()  #  输出"<div><p>Hello world.</p></div>"
    

    可见程序是从上往下依次执行的,func函数先被内层装饰器修饰

  • 相关阅读:
    bootstrap
    jQuery快速入门
    前端jQuery
    前端BOM和DOM
    前端js
    前端css
    前端知识之HTML内容
    线程池
    线程
    LightOJ
  • 原文地址:https://www.cnblogs.com/authetic/p/9881393.html
Copyright © 2011-2022 走看看