• Python开发【第十四篇】装饰器


    装饰器

    什么是装饰器?

    ​ 装饰器是一个函数,主要作用是用来给包装另一个函数或者类

    包装的目的是不改变原函数名(或类名)的情况下改变或添加被包装对象的功能

    函数装饰器

    是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数

    语法:

    def 装饰器函数名(参数):
    	语句块
    	return 函数对象
    @张诗琪函数名
    def 函数名(形参列表):
    	语句块
    

    示例:

    # 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
    # 的语法
    
    def mydeco(fn):
        def fx():
            print("++++++++++++++++")
            print('----------------')
        return fx
    
    def myfunc():
        '''此函数将作为被装饰函数'''
        print("myfunc被调用")
    
    # 原理是让myfunc重新绑定mydeco返回回来的函数
    myfunc = mydeco(myfunc)
    
    myfunc()
    myfunc()
    myfunc()
    
    # 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
    # 的语法
    
    def mydeco(fn):
        def fx():
            print("++++++++++++++++")
            print('----------------')
        return fx
    
    @mydeco
    def myfunc():
        '''此函数将作为被装饰函数'''
        print("myfunc被调用")
    
    # myfunc上的@mydeco 等同于在
    # 此处加上 myfunc=mydeco(myfunc)
    
    myfunc()
    myfunc()
    myfunc()
    
    
    # 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
    # 的语法
    
    def mydeco(fn):
        def fx():
            print("++++++++++++++++")
            fn()  # 调用以前的被装饰函数
            print('----------------')
        return fx
    
    @mydeco
    def myfunc():
        '''此函数将作为被装饰函数'''
        print("myfunc被调用")
    
    myfunc()
    myfunc()
    myfunc()
    
    # 此示例示意装饰器的用途和作用
    # 模拟银行项目
    #    业务: 存钱和取钱
    # ----- 小李以下小写写的装饰器-----
    def privileged_check(fn):
        def fx(n, yuan):
            print("正在检查权限..... OK!")
            fn(n, yuan)  # 调用被装饰函数
        return fx
    
    def send_message(fn):
        def fy(n, x):
            fn(n, x)
            print("正在发送给...", n)
        return fy
    
    # ------
    @privileged_check
    def savemoney(name, x):
        print(name, '存钱', x, "元")
    
    @privileged_check
    @send_message
    def withdraw(name, x):
        print(name, "取钱", x, "元")
    
    
    # ----------
    savemoney("小王", 200)
    savemoney("小赵", 400)
    
    withdraw("小钱", 500)
    

    函数的文档字符串

    函数内第一次末赋值给任何变量的字符串是此函数的文档字
    符串

    语法:

     def 函数名(参数列表):
     	'函数的文档字符串'
     	语句块
    

    示例:

    def hello(name):
        '''这是一个向别人问好的函数
            name 绑定人的姓名
            '''
        pass
    

    说明:
    文档字符串通常用来说明本函数的功能的使用方法
    函数的文档字符串绑定在函数对象的__doc__ 属性上

    函数的 doc 属性
    __doc__属性用于绑定函数的文档字符串

    函数定义语句的完整的语法:
    [@装饰器名1]
    [@装饰器名2]
    ...
    def 函数名([位置形参], [*元组形参], [命名关键字形参]
    ,[**字典形参]):
    '文档字符串'
    语句块

  • 相关阅读:
    input填入字符会出现黄色
    安装Scrapy时出现问题scrapy unicodedecodeerror ascii codec cant decode byte 0xd1 in position
    SVN 出现:Previous operation has not finished; run 'cleanup' if it was interrupted。
    Myeclipse小技巧
    好的开发网站
    BZOJ 1968
    BZOJ 1010
    BZOJ 1015
    BZOJ 3875
    BZOJ 2705
  • 原文地址:https://www.cnblogs.com/pythonliuwei/p/11846950.html
Copyright © 2020-2023  润新知