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

    1. 装饰器概述 

      本文不涉及类装饰器。

      装饰器是一个函数。

        通常将函数作为参数传递给装饰器函数。

        装饰器函数通常包含了一个闭包。闭包是函数内部一个函数,在函数内部增加了一个变量局部作用域。通常,装饰器会修改被装饰的函数。

    2. 代码解释

    2.1  函数装饰器用法简述

      装饰器在紧挨着定义一个函数的 def 语句之前一行编写,@符号以及紧随其后的对于元函数的一个引用组成。假如有个名为 decorate 的装饰器

    @decorate
    def target():
    print('running target()')

      上述代码等价于如下代码:

    def target():
    print('running target()')
    target = decorate(target)

    2.2  装饰器通常把被装饰的函数替换为另外一个函数

      让一个函数作为装饰器的关键是其将一个函数作为参数传递给它

    >>> def f1(f):
        def f2():
            print('这是闭包')
        return f2
    
    >>> def f3():
        print('被装饰函数')
    
        
    >>> f3()
    被装饰函数
    >>> f3
    <function f3 at 0x02375588>
    >>> @f1  # 装饰器会将函数f3替换成函数f2
    def f3():
        print('被装饰函数')
    
        
    >>> f3()
    这是闭包
    >>> f3    # 下面这句:f3是f1局部作用域里面函数f2的引用(.号)
    <function f1.<locals>.f2 at 0x023B6DB0>

    2.3  装饰器不修改被装饰函数的情况

      注册函数(待续)......

    2.4  装饰器在加载模块时立即执行

      如果将一个程序作为模块导入另外一个程序(不作为脚本运行),则装饰器将在模块导入时立即运行,详细见《流畅的Python》第七章7.2节。

     

    作者:南宫恨

    正是江南好风景,落花时节又逢君

  • 相关阅读:
    CSS
    回归分析过程实例(练习)
    结构方程模型处理二阶混合型(反映性+形成性)构念的方法
    python 列表推导式
    python3的enumerate函数
    SecureCRT上传下载文件
    scrapy连接MongoDB
    scrapy连接MySQL
    在Pycharm中运行Scrapy爬虫项目的基本操作
    mysql基础操作学习笔记(2)----索引
  • 原文地址:https://www.cnblogs.com/ydkh/p/14680624.html
Copyright © 2011-2022 走看看