Python学习day12

装饰器 decorators

什么是装饰器
  装饰器是一个函数,主要作用是用来包装另一个函数或类(后面会讲)
  作用:
    是在不改变原函数名(或类名)的情况下改变被包装对象的行为
函数装饰器:
  函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数
语法:
    def 装饰器函数名(参数):
        语句块
        return 函数对象
    @装饰器函数名<换行>
    def 函数名(形参列表):

        语句块

示例:

def mydeco(fn):
    def fx():
        print("++++++++这是myfunc调用之前++++++++")
        # 要想在此处调用被装饰的函数myfunc怎么办?
        fn()  # 调用被装饰函数
        print("--------这是myfunc调用之后--------")
    return fx

@mydeco
def myfunc():
    print("函数myfunc被调用")
myfunc()  
# 此示例示意装饰器在不改变原函数和调用者行为的情
# 况下来改变原有函数功能

# 小赵写了一个装饰器函数:
def privillage_check(fn):
    def fx(name, x):
        print("正在检查权限.....")
        fn(name, x)  #权限通过可以调用相应函数
    return fx


# 写一个操作数据的函数(此函数用来示意存钱操作)
@privillage_check
def savemoney(name, x):  # 魏老师写的函数,用于存钱
    print(name, '存钱', x, '元')

@privillage_check
def withdraw(name, x):  # 冯老师写的函数,用于取钱
    print(name, '取钱', x, '元')

# ---- 以下是调用者小闵写的程序 -------
savemoney("小张", 200)
savemoney('小赵', 400)

withdraw('小李', 500)
函数的文档字符串
  函数内第一次未赋值给任何变量的字符串是此函数的文档字符串

  语法:
    def 函数名(形参列表):
        '''函数的文档字符串'''
        函数语句块
  示例:
    def hello():
        '''此函数用来打招呼...
        这是函数的文档字符串
        '''
        pass

    >>> help(hello)

说明:
    1. 文档字符串通常用来说明本函数的功能和使用方法
    2. 在交互模式下,输入:help(函数名) 可以查看函数的文档字符串

函数的 __doc__ 属性
  __doc__ 属性用于记录文档字符串

函数的 __name__ 属性
  __name__ 用于记录函数的名称

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

      语句块




猜你喜欢

转载自blog.csdn.net/sinat_42311311/article/details/80889150