zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    About Me
    洛谷 P2633 Count on a tree
    【题解】牛客编程巅峰赛S1赛季第1场
    洛谷 P4132 [BJOI2012]算不出的等式
    洛谷 P5970 [POI2016]Nim z utrudnieniem
    DP没入门就入土
    洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
    洛谷 P3592 [POI2015]MYJ
    51Nod 1683 最短路
    51Nod 1327 棋盘游戏
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/14893169.html
Copyright © 2011-2022 走看看