zoukankan      html  css  js  c++  java
  • python自动化_day4_装饰器复习和装饰器进阶

    ---恢复内容开始---

    闭包的定义:内部函数引用外部函数的变量

    闭包的应用:装饰器

    为什么会有装饰器:装饰器能够在原有的函数前后增加功能,且不改变原函数的调用方式

    #装饰器的进阶,套用一个新的函数,可以全局控制所有装饰器是否生效。
    import
    time FLAG = True def outer(flag): def timmer(f): def inner(*args,**kwargs): if flag == True: start_time = time.time() ret = f(*args,**kwargs) end_time = time.time() print(end_time - start_time) else: ret = f(*args,**kwargs) return ret return inner return timmer @outer(FLAG) # func = timmer(func) def func(a,b): print('begin func,a',a) time.sleep(0.3) print('end func,b',b) func(1,2)
    #装饰器 登录 记录日志
    login_info = {'alex':False}
    def login(func):
        def inner(name):
            if login_info[name] != True:
                user = input('user : ')
                pwd = input('pwd : ')
                if user == 'alex' and pwd == 'alex123':
                    login_info[name] = True
                if login_info[name] == True:
                    ret = func(name)
                    return ret
        return inner
    @login
    def index(name):
        print('welcome %s to index' %name)
    
    index('alex')
    #多个装饰器装饰一个函数,需要把先执行的装饰器放在里面先去执行。
    1
    def wrapper1(func): 2 def inner(): 3 print 'w1,before' 4 func() 5 print 'w1,after' 6 return inner 7 8 def wrapper2(func): 9 def inner(): 10 print 'w2,before' 11 func() 12 print 'w2,after' 13 return inner 14 15 @wrapper2 16 @wrapper1 17 def foo(): 18 print 'foo' 19 20 foo() 21 22 运行结果: 23 w2,before 24 w1,before 25 foo 26 w1,after 27 w2,after

  • 相关阅读:
    java生成UUID通用唯一识别码 (Universally Unique Identifier)
    使用ToolRunner运行Hadoop程序基本原理分析
    Hadoop入门经典:WordCount
    Hadoop配置文件
    【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
    8大排序算法图文讲解
    动态字典树_前缀相互查找(HDU_1671)
    DP_基本DP+排序(HDU_1421)
    斯特灵公式
    七种 qsort 排序方法
  • 原文地址:https://www.cnblogs.com/tewu/p/8961448.html
Copyright © 2011-2022 走看看