• python之装饰器


    @outer
    def foo():
        pass
    装饰器
    1.装饰器是一个函数,至少2层
    2.执行outer函数,被装饰的函数作为参数outer(foo),outer函数的返回值,赋值给被装饰的函数的函数名
    3.动态参数,可以装饰含有n个参数的函数
    4.函数的返回值
    5.多装饰器
    6.3层装饰器
           
     
    装饰不含参数的函数
     

    @outer = outer(f1)
     
     

     
    装饰含参数的函数
     
     
    装饰含多个参数的函数
    通过 *args,**kwargs ,传入几个参数,函数就会自动判断
     
     
     
    装饰含返回值的函数return
     
     
    多装饰器
    #!/usr/bin/env python
    #codencoding: utf-8
    def outer1(func):
        def wapper():
            print '装饰器1'
    func()
        return wapper
    
    def outer2(func):
        def wapper():
            print '装饰器2'
    func()
        return wapper
    
    @outer2
    @outer1
    def foo():
        print 'It is foo'
    
    foo()
    

      

     
     
     
     
    3层装饰器
        @w2(arg)
            1、执行w2函数,得到返回值,ret
            2、创建装饰器,@+ ret : @ret
            3、执行装饰器@ret
                  
     
     

    装饰器-动态参数-登陆验证

    def login():
        name = raw_input('please you name:')
        pwd = raw_input('please you pwd:')
        if name == 'admin' and pwd == '123456':
            return True
        else:
            return False
    
    def outer(func):
        def wrapper():
            is_login = login()
            if not is_login:
                return '登陆失败'
            return func()
        return wrapper
    
    @outer
    def f1():
        print 'f1'
        return '欢迎光临'
    
    print f1()
    

      

    def login(key):    #验证用户名
        local_key = 'fefwgwe2352525sdgdsgdsgsgs'
        if local_key == key:
            return True
        else:
            return False
    def outer(func):
        def wrapper(*args,**kwargs):
            #key = kwargs['token']      #取出token对应值
            #del kwargs['token']        #删除token键值,因为f1()只能传1个参数
            key = kwargs.pop('token')   #此句可代替上面2句功能
            is_login = login(key)
            if not is_login:
                return '非法用户'
            temp = func(*args,**kwargs)
            return temp
        return wrapper
    
    @outer
    def f1(arg):
        print 'f1',arg
        return '欢迎光临'
    
    key = 'fefwgwe2352525sdgdsgdsgsgs'
    print f1('yangmv',token=key)
    

      

     
  • 相关阅读:
    产品团队管理
    产品版本规划
    gitlab服务器IP调整后修改domian或ip
    Linux服务器性能分析与调优
    linux设置别名连接远程服务器
    Yaml文件
    Alias采样算法
    Graph embedding(2)----- DeepWalk、Node2vec、LINE
    python学习(32)---networkx
    python报错
  • 原文地址:https://www.cnblogs.com/yangmv/p/5148987.html
Copyright © 2020-2023  润新知