• 函数的注释


    装饰器的回顾:

    装饰器的作用:在不改变原有代码的基础上给函数添加功能

    通用装饰器的写法:
    def wrapper(fn):
    def inner(*args,**kwargs):
    '''在目标函数之后要做的事情'''
    ret = fn(*args,**kwargs)
    '''在目标函数之后要做的事情'''
    return ret
    return inner
    @wrapper
    def target():
    print("我是目标函数")
    target()
    执行过程:
    1.程序向下执行,当执行到@wrapper的时候,把函数作为参数传递给wrapper.
    inner函数.重新赋值给target
    2.当执行到target的时候,我们实际上执行的是inner函数,inner函数会先执行函数之前的代码,然后在执行你的目标函数,执行完目标函数最后执行的是目标函数之后的代码

    如何给函数添加注释:

    用六个双引号,在最中间回车,如下所示:

     

     
    def chi(food,drink):
    """
    这里是函数的注释
    :param food:
    :param drink:
    :return:
    """
    print(food,drink)
    return "very good"

    def chi(food,drink):

    print(food,drink)
    print(chi.__doc__) #获取函数的文档注释
    print(chi.__name__) #获取到函数名称
    return "very good"
    chi("吃嘛嘛香","我不想吃")
    print(chi.__doc__)
    print(chi.__name__)
     

    __doc__和__name__:  注意,这里是两个下划线   下划线+下划线+name / doc +下划线+下划线

    函数名.__name__可以查看函数的名字

    函数名.__doc__可以查看函数的文档注释


    引入函数模块

    from functools import wraps

    from functools import wraps 
    #  装饰器:对传递进来的函数进行包装,可以在目标函数之前和之后添加任意的功能
    def wrapper(func):
    @wraps(func) #使用函数原来的名字
    def inner(*args,**kwargs):
    '''在执行目标函数之前要执行的内容'''
    ret = func(*args,**kwargs)
    '''在目标函数之后要执行的内容'''
    return ret
    return inner
    @wrapper
    def target_func():
    print("我是目标函数")
    target_func()

    print(target_func.__name__)
    @wrapper
    def new_target_func():
    print("我是另一个目标函数")
    new_target_func()
    print(new_target_func.__name__)

    *args和**kwargs什么时候打散,什么时候聚合
    1.接收参数的时候聚合,参数声明
    2.传递参数的时候打散,给函数传递实参
    def wrapper(func):
    @wraps(func)
    def inner(*args,**kwargs): #这里是聚合
    '''在目标函数之前要执行的内容'''
    ret = func(*args,**kwargs) #这里是打散,这里的作用,其实就是为了保证我可以装饰所有的函数而准备的
    '''在目标函数之后要执行的内容'''
    return ret
    return inner
    
    
    装饰器传参
    现在来这样一个场景,还是来约一约小妹妹
    from functools import wraps
    def wrapper(fn):
    @wraps(fn)
    def inner(*args,**kwargs):
    print("问问金老板,行情怎么样")
    ret = fn(*args,**kwargs)
    print("艹,金老板骗我")
    return ret
    return inner
    @wrapper
    def yue():
    print("约一约")
    yue()
    
    
    接下来是函数的传参,给函数一个开关来决定装饰器是否装饰函数
    
    
    from functools import wraps

    def wrapper_out(flag):
    def wrapper(fn):
    @wraps(fn)
    def inner(*args,**kwargs):
    if flag == True:
    print("问问金老板,行情怎么样")
    ret = fn(*args,**kwargs)
    print("艹,金老板骗我")
    return ret
    else:
    ret = fn(*args,**kwargs)
    return ret
    return inner
    return wrapper

    @wrapper_out(False)
    def yue():
    print("约一次又不会死")
    yue()
    @wrapper_out(True)
    def yue():
    print("xxxxx")
    yue()

    多个装饰器装饰同一个函数
    def wrapper1(fn):
    def inner(*args,**kwargs):
    print("111")
    ret = fn(*args,**kwargs)
    print("222")
    return ret
    return inner

    def wrapper2(fn):
    def inner(*args,**kwargs):
    print("333")
    ret = fn(*args,**kwargs)
    print("444")
    return ret
    return inner
    @wrapper1
    @wrapper2
    def eat():
    print("我想吃水果")
    eat()

    多个装饰器装饰一个函数,其实说白了就是我用几个功能去和你函数搞事情
     
     
     
     
  • 相关阅读:
    对于ajax传递中文乱码问题,研究js encodeURI 与request.HtmlEncode的区别
    对于sa无法登陆,如何用windows身份验证来修改密码
    ASP.Net中自定义Http处理及应用之HttpHandler篇 1
    ReportViewer报表控件解析与使用(原)
    HttpUtility.UrlEncode,Server.UrlEncode 的区别
    xsl xml 以及 树的编写(原创)
    【转】存储过程的优缺点
    【转】关闭模态子窗口后刷新父窗口
    【转】ASP.NET 文件下载
    【转】去除HTML标签的方法
  • 原文地址:https://www.cnblogs.com/ALADL/p/9188192.html
Copyright © 2020-2023  润新知