zoukankan      html  css  js  c++  java
  • Day12

    1、函数的有用信息

    函数的执行时,*打散

    函数的定义时,*聚合

    def func1(*args): #args (1,2,3)
        print(666)
        return args
    print(func1(*[1,2,3]))  # inner(3,5) 打散
    def func1():
        """
        此函数是完成登陆的功能,参数分别是...作用。
        :return: 返回值是登陆成功与否(True,False)
        """
        print(666)
        # print(func1.__name__)
        # print(func1.__doc__)
        return True
    func1()
    print(func1.__name__)
    print(func1.__doc__)
    def wrapper(f):  # f = func1
        #@wraps(f)
        def inner(*args,**kwargs): #聚合
            #args (1,2,3)
            '''执行函数之前的相关操作'''
            ret=f(*args,**kwargs)  # 打散 1,2,3
            '''执行函数之后的相关操作'''
            return ret
        return inner
    @wrapper
    def func1():
        """
        此函数是完成登陆的功能,参数分别是...作用。
        :return: 返回值是登陆成功与否(True,False)
        """
        print(666)
        return True
    func1()
    print(func1.__name__)
    print(func1.__doc__)

    2、带参数的装饰器

    import time
    def timmer(*args,**kwargs):
        def wrapper(f):
            def inner(*args,**kwargs):
                if flag:
                    start_time=time.time()
                    ret = f(*args,**kwargs)
                    time.sleep(111111111111111111)
                    end_time=time.time()
                    print('此函数的执行效率%f' %(end_time-start_time))
                else:
                    ret=f(*args,**kwargs)
            return inner
        return wrapper
    flag = True
    @timmer(flag,2,3)  # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
    def func1():
        print(666)
    @timmer(flag)
    def func2():
        print(777)
    func1()
    func2()
    import time
    flag = True
    def wrapper(f):
        def inner(*args,**kwargs):
            if flag:
                start_time = time.time()
                ret = f(*args,**kwargs)
                time.sleep(0.3)
                end_time = time.time()
                print('此函数的执行效率%f' % (end_time-start_time))
            else:
                ret = f(*args, **kwargs)
            return ret
        return inner

    3、多个装饰器装饰一个函数

    def wrapper1(func):  #func== f函数名
        def inner1():
            print('wrapper,before func')  #2
            func()
            print('wrapper1,after func')  #4
        return inner1
    def wrapper2(func):  # func == inner1
        def inner2():
            print('wrapper2 ,before func')  # 1
            func()
            print('wrapper2 ,after func')  # 5
        return inner2
    @wrapper2  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
    @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
    def f():  # 3
        print('in f')
    
    f()  # inner2()
  • 相关阅读:
    react脚手架和JSX
    promise
    防抖和节流
    call/apply/bind 用法
    js this指向
    vue单页面应用刷新网页后vuex的state数据丢失的解决方案
    Echarts基础
    继承
    原型链
    vue项目中使用生成动态二维码
  • 原文地址:https://www.cnblogs.com/a352735549/p/8692372.html
Copyright © 2011-2022 走看看