zoukankan      html  css  js  c++  java
  • 学习python课程第十二天

    一。 装饰器:

    1 什么是装饰器
    器=>工具
    装饰=>指的是为被装饰对象添加新功能

    装饰器本身可以是任意可调用的对象=>函数
    被装饰的对象也可以是任意可调用的对象=>函数

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

    2 为何要用装饰器
    开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放
    对修改封闭:
    1. 不能修改功能的源代码
    2. 也不能修改功能的调用方式

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

    装饰器就是要在不修改功能源代码以及调用方式的前提下为原功能添加额外新的功能
    3 如何用装饰器

    '''
    import time

    def index():
    print('welcome to index page')
    time.sleep(3)

    def outter(func):
    # func=最原始那个index的内存地址
    def wrapper():
    start=time.time()
    func() # 最原始那个index的内存地址()
    stop=time.time()
    print('run time is %s' %(stop-start))
    return wrapper

    index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址
    index() #wraper()



    二。装饰器的修正:
    import time

    def index():
    print('welcome to index page')
    time.sleep(3)
    return 123

    #==============================================================
    def outter(func):
    # func=最原始那个index的内存地址
    def wrapper():
    start=time.time()
    res=func() # 最原始那个index的内存地址()
    stop=time.time()
    print('run time is %s' %(stop-start))
    return res
    return wrapper

    index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址
    #==============================================================

    res=index() #res=wraper()
    print(res)


    三。装饰器的修正2:
    import time

    def index():
    print('welcome to index page')
    time.sleep(3)
    return 123

    def home(name):
    print('welcome %s to home page' %name)
    time.sleep(1)

    #==============================================================
    def outter(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
    return wrapper

    index=outter(index) #index=outter(最原始那个index的内地址) #index=wrapper函数的内地址
    home=outter(home) #index=outter(最原始那个home的内地址) #home=wrapper函数的内地址
    #==============================================================

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



    四。装饰器的语法糖:
    装饰器的名字,要在被装饰对象的正上方单独一行写上。
    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__)

    (经过处理。index.跟老的lindex的名字,注释。都完全相同)

    五。有参数装饰器
    在函数内部需要一个参数,但是自己的参数不能改变的时候,就要在外面再包一层函数来传给需要参数的函数。


    六。global与nonlocal:
    x=1
    def func():
    x=2

    func()
    print(x)


    x=[]
    def func():
    x.append(1)
    x.append(2)
    x.append(3)

    func()
    print(x)

    global: 在局部声明变量是全局变量
    x=1
    def func():
    global x
    x=2

    func()
    print(x)

    nonlocal:在局部声明变量是外层函数的变量
    x=333
    def f1():
    x=222
    def f2():
    x=111
    def f3():
    nonlocal x
    x=0
    f3()
    print('f2内部的x: ',x)
    f2()
    print('这是f1内部的x: ',x)

    f1()
    print(x)




















  • 相关阅读:
    题解+补题
    信息安全导论期末复习
    Codeforces Round #104 (Div.2)
    中国计量大学现代科技学院第四届“中竞杯”程序设计校赛(同步赛)
    第一章练习-1
    【练习】购物车程序
    【转】Python中设置输出文字的颜色
    字符串,列表,元组,字典间的互相转换
    【转】Python Enhancement Proposal #8【PEP8】
    【转】pycharm的一些快捷键
  • 原文地址:https://www.cnblogs.com/lvyipin1/p/9715533.html
Copyright © 2011-2022 走看看