• 闭包函数的应用+内置函数


    什么是装饰器?

    器---->工具----->定义一个函数

    装饰---->指的是为被装饰对象添加功能

    装饰器本身就是任意可调用的对象---->函数

    被装饰的对象也可以是任意可调用的对象---->函数

    目标:写一个函数来为另一个函数添加新功能

    为何要用装饰器?

    开放封闭原则:软件一旦上线就应该对修改封闭,对扩展开放

    对修改封闭:1,不能修改源代码

    2,也不能修改功能的调用方法

    扩展开放:可以为原有的功能添加新的功能

    装饰器就是在不能改源代码以及调用方式的前提下为原功能添加新的功能。

    3,如何装饰器?

    无参装饰器

    无参装饰器的模板:

    
    
    import time
    from functools import wraps

    def outter(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
    start = time.time()
    res=func(*args,**kwargs)
    stop = time.time()
    print('run time is %s'%(stop-start))
    return res
    return wrapper

    @outter
    def index():
    """这是index功能"""
    print('welcome to school ')
    time.sleep(3)
    return 123
    @outter
    def home(name):
    """这是home功能"""
    print('welcome to %s home page'%name)
    time.sleep(1)

    # index()
    # home('zrg')
    print(help(index))
    print(index.__name__)

    装饰器的语法糖@

    @装饰器名字

    在被装饰对象正上方单独一行写上@装饰器的名字

    # @装饰器的名字:要在被装饰对象正上方单独一行写上
    import time
    def timmer(func): # func=最原始那个home的内地址
    def wrapper(*args,**kwargs):
    start=time.time()
    res=func(*args,**kwargs)
    stop=time.time()
    print('run time is %s' %(stop-start))
    return res
    wrapper.__doc__=func.__doc__
    wrapper.__name__=func.__name__
    return wrapper

    @timmer #index=timmer(index) ##index=timmer(最原始那个index的内地址) #index=wrapper函数的内地址
    def index():
    """这是index功能"""
    print('welcome to index page')
    time.sleep(3)
    return 123

    @timmer #home=timmer(home) #index=timmer(最原始那个home的内地址) #home=wrapper函数的内地址
    def home(name):
    """这是home功能"""
    print('welcome %s to home page' %name)
    time.sleep(1)

    # home('egon') #wrapper('egon')
    # index() #wrapper()

    # print(help(index))
    # print(help(home))
    # print(index.__doc__)

    print(index.__name__)
    '''

    from functools import wraps

    import time
    def timmer(func): # func=最原始那个home的内地址
    @wraps(func)
    def wrapper(*args,**kwargs):
    start=time.time()
    res=func(*args,**kwargs)
    stop=time.time()
    print('run time is %s' %(stop-start))
    return res
    return wrapper

    @timmer
    def index():
    """这是index功能"""
    print('welcome to index page')
    time.sleep(3)
    return 123

    @timmer
    def home(name):
    """这是home功能"""
    print('welcome %s to home page' %name)
    time.sleep(1)

    print(help(index))
    print(index.__name__)

    有参装饰器

    有参装饰器模板:

    # import time
    #
    # user_info = {'new_user':None}
    #
    # def auth(func):
    # def swapper(*args,**kwargs):
    # if user_info['new_user'] is not None:
    # res=func(*args, **kwargs)
    # return res
    # inp_name = input('enter your name>>: ').strip()
    # inp_pwd = input('enter your password>>: ').strip()
    # if inp_name == 'egon' and inp_pwd == '123':
    # user_info['new_user'] = inp_name
    # print('login successful')
    # res = func(*args,**kwargs)
    # return res
    # else:
    # print('err or password error')
    #
    # return swapper
    #
    # @auth
    # def index():
    # print('welcome to index page')
    # time.sleep(2)
    # return 123
    # @auth
    # def home(name):
    # print('welcome to %s home page' %name)
    # time.sleep(1)
    #
    #
    # index()
    # home('egon')
    def outter2(xxx):
    def outter(func):
    def wrapper(*args,**kwargs):
    res = func(*args,**kwargs)
    print(xxx)
    return res
    return wrapper
    return outter
    f=outter2(333)
  • 相关阅读:
    HTTPS原理浅析
    Java8 HashMap源码分析
    Java8 ArrayList源码分析
    Java反射
    Java泛型
    Tensorflow卷积神经网络
    Java8 Stream简介
    java.io与网络通信
    Python实现RNN
    域名系统DNS简介
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/9713031.html
Copyright © 2020-2023  润新知