zoukankan      html  css  js  c++  java
  • 装饰器

    #函数的作用域是就近原则
    def warpper():
    name = 'cici'
    print('i am out of box %s'%name)
    def deco():
    name = 'lily'
    print('i am in box %s'%name)
    def hhh():
    print('xxxx %s'%name) ###### 这一层没有自己的name,要取name的值就往上找,离他最近的name = 'lily'
    hhh()
    deco()
    print('外面的name是%s'%name)
    warpper() ## result is : i am out of box

    #装饰器

    #作用是在不改变原有函数的入参情况下给函数添加新功能

    import time
    def run():
    print('run..')
    time.sleep(1)
    def run_time(func):
    start_time = time.time()
    func()
    end_time= time.time()
    print('run函数运行是',end_time - start_time)
    run_time(run)

    ############### 装饰器
    def timer(func):
    def deco(*args,**kwargs): ########## 统计函数运行时间 ######## *args,*kwargs是用来接收调用函数的参数
    start_time = time.time()
    func(*args,*kwargs)
    end_time = time.time()
    print('run函数运行时间', end_time - start_time)
    return deco
    #上面这个函数其实就是返回了一个函数名,函数名存的是一段代码

    #@time ######调用是写 @ timer
    def run():
    print('run...')
    time.sleep(1)

    t = timer(run)
    print(t) #######返回内存地址: <function timer.<locals>.deco at 0x00617ED0>

    r = timer(run) ## r == deco() 这段代码即是 @ timer 这一句代码
    #调用timer函数的时候,要传入一个方法名
    #timer函数在函数内部调用叫做deco
    #又在函数deco 函数内部调用了timer里面传入的方法

    r() ########### r ==dec0(),运行r()就是调用的deco()



  • 相关阅读:
    Poj3126
    Poj1426
    2806 红与黑
    3100 蜗牛
    1225 八数码难题
    2549 自然数和分解
    2547 东方辉针城
    2928 你缺什么
    1629 01迷宫
    1029 遍历问题
  • 原文地址:https://www.cnblogs.com/yuer011/p/6985602.html
Copyright © 2011-2022 走看看