Python学习Day13

1.叠加多个装饰器
    import    time
    def outter(func):
        #func=index
        def wrapper(*args,**kwargs):
            start=time.time()
            res=func(*args,**kwargs)
            stop=time.time()
            print(stop-start)
            return res
        return wrapper
        
    from functools import wraps

    def outter(func):
        @wraps(func)
        def wrapper(*args,**kwargs):
            res=func(*args,**kwargs)
            return res 
        #wrapper.__name__=func.__name__
        #wrapper.__doc__=func.__doc__
        return wrapper

    @outter #index=outter(index) #index=wrapper
    def index():
        """
        这是index函数。。。
        :return:
        """
        print('from index')
        
    print(index.__name__) #print(wrapper.__name__)
    print(index.__doc__)


    叠加多个装饰器
        1.加载顺序(outter函数的调用顺序):自下而上
        2.执行顺序(wrapper函数的执行顺序):自上而下
        
    def outter1(func1):#func1=wrapper2的内存地址
        print('加载了outter1')
        def wrapper1(*args,**kwargs):
            print('执行了wrapper1')
            res1=func1(*args,**kwargs)
            return res1
        return wrapper1
        
    def outter2(func2): #func2=wrapper3的内存地址
        print('加载了outter2')
        def wrapper2(*args,**kwargs):
            print('执行了wrapper2')
            res2=func2(*args,**kwargs)
            return res2
        return wrapper2

    def outter3(func3): # func3=最原始的那个index的内存地址
        print('加载了outter3')
        def wrapper3(*args,**kwargs):
            print('执行了wrapper3')
            res3=func3(*args,**kwargs)
            return res3
        return wrapper3

    @outter1 # outter1(wrapper2的内存地址)======>index=wrapper1的内存地址
    @outter2 # outter2(wrapper3的内存地址)======>wrapper2的内存地址
    @outter3 # outter3(最原始的那个index的内存地址)===>wrapper3的内存地址
    def index():
        print('from index')

    print('======================================================')
    index()
        
    import time

    def timmer(func):
        def aaa(*args,**kwargs):
            start=time.time()
            res=func(*args,**kwargs) #最原始那个index的内存地址()
            stop=time.time()
            print('run time is %s' %(stop -start))
            return res
        return aaa

    def auth(func):
        def bbb(*args,**kwargs):
            name=input('name>>>: ').strip()
            pwd=input('pwd>>>: ').strip()
            if name == 'egon' and pwd == '123':
                print('login successfull')
                res=func(*args,**kwargs)
                return res
            else:
                print('user or pwd error')
        return bbb

    @timmer
    @auth
    def index():
        time.sleep(1)
        print('from index')

    index()
    
2.有参装饰器
    import time
    current_user={'user':None}
    
    def outter(func):
        def wrapper(*args,**kwargs)
            if current_user['user'] is not None:
                res=func(*args,**kwargs)
                return res
                
            user=input('username>>>:').strip()
            pwd=input('password>>>:').strip()
            if user == 'egon' and pwd == '123':
                print('login successfull')
                current_user['user']=user
                res=func(*args,**kwargs)
                return res
            else:
                print('user or password error')
        return wrapper
        
    @outter
    def index():
        time.sleep(1)
        print('from index')
        
    @outter
    def home(name):
        print('welcome %s' %name)
        
    index()
    home('egon')
    
    
    import time
    current_user={'user':None}
    def auth(engine='file'):
        def outter(func):
            def wrapper(*agrs,**kwargs):
                if current_user['user'] is not None:
                    res=func(*args,**kwargs)
                    return res
                    
                user=input('username>>>:').strip()
                pwd=input('password>>>:').strip()
                
                if engine == 'file':
                    #基于文件的认证
                    if user == 'egon' and pwd == '123':
                        print('login successfull')
                        current_user['user']=user
                        res=func(*args,**kwargs)
                        return res
                    else:
                        print('user or password error')
                elif engine == 'mysql':
                    #基于mysql的认证
                    print('基于mysql的认证')
                elif engine == 'ldap’:
                    #基于ldap的认证
                    print('基于ldap的认证')
                else:
                    print('不知道engine')
            return wrapper
        return outter
        
    @auth('ldap')#@outter#index=outter(index)#index=wrapper
    def index():
        time.sleep(1)
        print('from index')
    
    @auth('mysql')#@outter#home =outter(home) #home=wrapper
    def home(name):
        print('welcome %s' %name)
        
    index()
    home('egon')
    
3.三元表达式
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    
    res=max2(10,20)
    
    x=10
    y=20
    
    #res=x if x > y else y
    #print(res)
    
    
    res='OK' if False else 'No'
    print(res)
    
4.生成式
    列表生成式
    1=[]
    for i in range(10):
        if i > 4:
            l.append(i**2)
            
            
    l=[i**2 for i in range(10) if i > 4]
    print(l)
    
    
    name=['egon','alex_sb','kevin_sb','hxx_sb','cxx_sb']
    sbs=[]
    for name in names:
        if name.endswith('sb'):
            sbs.append(name)
            
    sbs=[name.upper() for name in names if name.endswith('sb')]
    
    print([name.upper() for name in names])
    print([name for name in names if name.endswith('sb')])
    
    字典生成式
    res={i:i**2 for i in range(10) if i > 3}
    print(res)
    
    
    print({i for i in 'hello'})
    
5.匿名函数
    def func():
        print('from func')
        
    func()
    
    匿名函数就是只定义了一个函数的内存地址,主要用于临时使用一次的场景
    func=lambda x,y:x+y
    print(func)
    print(func(1,2))
    
    res=(lambda x,y:x+y)(1,2)
    print(res)
    
    
    print(max([10,11,-3,23]))
    salaries={
        'egon':3000,
        'alex':100000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    def func(k):
        return salaries[k]
        
    print(max(salaries,key=lambda k:salaries[k]))
    print(min(salaries,key=func))
    for循环的结果        比较依据
    'egon'                3000
    'alex'                100000000
    'wupeiqi'            10000
    'yuanhao'            2000
    
    l=[4,2,3]
    l_new=sorted(l,reverse=True)
    print(l_new)
    
    
    print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
    
    
    
    
    
    
    
        

 

posted on 2018-12-04 19:23  鲨鱼辣椒L  阅读(92)  评论(0编辑  收藏  举报

导航