• Python 装饰器


    简介:

      装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

    1.装饰器的基本使用

    复制代码
    # 注意程序运行步骤
    def decorator(func): # 这里的参数func其实就是foo函数
        def inner():
            print("1.程序第一步执行到这里")
            func() # 这里的func函数其实就是foo函数
            print('3.这是inner函数')
        return inner
    def foo():
        print('2.这是foo函数')
    foo = decorator(foo)
    foo()
    复制代码

     2.不带参数的装饰器

    复制代码
    def decorator(func): # 这里的参数func其实就是foo函数
        def inner():
            func_name = func.__name__
            print("1.程序第一步执行到这里,执行函数名称:",func_name)
            func()
            print("3.程序最后运行到这里")
            print("----------------------------------------------")
        return inner
    
    @decorator  # foo = decorator(foo)
    def foo():
        print('2.foo..')
    @decorator  # doo = decorator(doo)
    def doo():
        print('2.doo..')
    foo()
    doo()
    复制代码

    3.带参数的被装饰的函数

    复制代码
    def decorator(func):
        def inner(a, b):
            func_name = func.__name__
            print("1.程序第一步执行到这里,执行函数名称:", func_name)
            func(a, b)
            print("3.程序最后运行到这里")
            print("----------------------------------------------")
        return inner
    
    @decorator
    # add = decorator(addnum)
    # 实现两数相加操作
    def addnum(num1, num2):
        print("2.两数相加结果:",num1 + num2)
    
    @decorator
    # subnum = decorator(subnum)
    # 实现两数相减操作
    def subnum(num1, num2):
        print("2.两数相减结果:",num1 - num2)
    addnum(10, 5)
    subnum(10, 5)
    复制代码

    4.带参数的被装饰的函数和装饰器

    复制代码
    def decorator_arg(flag=0):
        def decorator(func):
            def inner(a, b):
                func_name = func.__name__
                print("1.程序第一步执行到这里,执行函数名称:", func_name)
                func(a, b)
                print("3.程序运行到这里")
                if flag:
                    print("4.传递给装饰器的参数为:",flag)
                    print("----------------------------------------------")
            return inner
        return decorator
    
    
    @decorator_arg(2)
    # add = decorator(addnum)
    # 实现两数相加操作
    def addnum(num1, num2):
        print("2.两数相加结果:",num1 + num2)
    
    @decorator_arg(2)
    # subnum = decorator(subnum)
    # 实现两数相减操作
    def subnum(num1, num2):
        print("2.两数相减结果:",num1 - num2)
    addnum(10, 5)
    subnum(10, 5)
    复制代码

    5.python装饰器总结

    复制代码
    def decorator_name(*args,**kwargs):  # 定义装饰器,可能带参数
        def decorator(func):  # 装饰器核心,以被装饰的函数对象为参数,返回装饰后的函数对象
            def inner(*args, **kvargs):  # 装饰的过程,参数列表适应不同参数的函数
                pass  # 修改函数调用前的行为
                func(*args, **kvargs)  # 调用函数
                pass  # 修改函数调用后的行为
            return inner
        return decorator
    
    @decorator_name()    # 给函数加上装饰器
    def funcname(参数):
        pass    # 自己定义的函数体
    复制代码

     文章转载:https://www.cnblogs.com/xingxingnbsp/p/11684216.html

  • 相关阅读:
    子类构造函数中调用虚函数问题验证
    socks5代理浅识
    关于C++标准库(第2版)std::remove_if的"特性"概述
    动态获取结构体中指定的属性值
    构造和析构函数定义为私有场景
    remove_pointer使用测验
    广播自定义消息实现进程间的通信问题
    遍历窗口权限问题
    嵌入窗口到桌面的问题
    实验一 熟悉实验环境
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/14893169.html
Copyright © 2020-2023  润新知