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)




















  • 相关阅读:
    Oracle 游标
    对"com1"的访问被拒绝
    几种不伤身体的速效减肥秘方 生活至上,美容至尚!
    护肤必备,教你如何护理肌肤 生活至上,美容至尚!
    九种食物摆脱便秘烦恼 生活至上,美容至尚!
    1个多月就能看到效果的减肥大法 生活至上,美容至尚!
    防晒涂抹四大要领,让你远离日晒痛苦 生活至上,美容至尚!
    晚间保养四部曲 轻松护肤有妙招 生活至上,美容至尚!
    夏日驱蚊虫蟑螂的最好办法! 生活至上,美容至尚!
    睡前一分钟打造完美下半身 生活至上,美容至尚!
  • 原文地址:https://www.cnblogs.com/lvyipin1/p/9715533.html
Copyright © 2011-2022 走看看