zoukankan      html  css  js  c++  java
  • 函数的注释

    装饰器的回顾:

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

    通用装饰器的写法:
    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()

    多个装饰器装饰一个函数,其实说白了就是我用几个功能去和你函数搞事情
     
     
     
     
  • 相关阅读:
    80端口被NT kernel & System 占用pid= 4的解决方法
    黑马程序员:装饰类的作用——增强被装饰类的方法的功能(利用组合实现复用)
    黑马程序员——java基础之文件复制
    10进制转换16进制原理及取得16进制最后一位或倒数第二位
    Django-admin源码流程
    Django-内置Admin
    Django-Form 补充
    有时间的时候可以看看
    编辑器KindEditor的使用
    Git的使用
  • 原文地址:https://www.cnblogs.com/ALADL/p/9188192.html
Copyright © 2011-2022 走看看