装饰器补充、三元表达式、生成式、匿名函数
一、叠加多个装饰器
  import time
def timmer(func):
      def wrapper():
            start_time=time.time()
            res=func()
            end_time=time.time()
            print('time is %s' %(end_time-start_time))
            return res
        return wrapper
	
def outer(func):
      # func=home
      def inner(*args,**kwargs):
            name=input('请输入名字:').strip()
            pwd=input('请输入密码:').strip()
            with open('aaa','r',encoding='utf8')as f:
                  for line in f:
                        data=line.strip('\n').split(',')
                        if name == data[0] and pwd == data[1]:
                            print('login successfully')
                            break
                  else:
                        print('username or password error')
            func(*args,**kwargs)
      return inner
	
@timmer
@outer
def home():
      time.sleep(1)
      print('welcome to home page')
home()
	  装饰器补充:
		    def outer(func):
		    @wraps(func)   #把所有属性赋值给wrappr
	  备注:
		    装饰器是要写到源函数正上方,一个装饰器写一行
		    timmer写到上面统计的是下面两个函数执行的时间
		    timmer写到下面统计的只是源函数执行的时间
    
	  结论:
		    1. 加载顺序(outter函数的调用顺序):自下而上
		    2. 执行顺序(wrapper函数的执行顺序):自上而下
    
二、有参装饰器
	  当装饰器需要传参的时候用有参装饰器
	  所谓有餐装饰器,就是套用三个函数
	  所传参数可以是一个,也可以不止一个,多个参数之间用逗号隔开
三、三元表达式
	  正常的比较函数:
	    def max2(x,y):
        if x > y:
              return x
        else:
              return y
	    res=max2(10,20)
	    print(res)
	
	
	  如果用三元表达式:
	    x=10
	    y=20
	  res=x if x > y else y
	  print(res)
	
四、生成式
1.列表生成式
	  正常for循环生成列表:
	  l=[]
	  for i in range(10):
		  if i > 4:
			    l.append(i**2)
	   print(l)
	  
	  列表生成式生成列表:
	  l=[i**2 for i in range(10) if i > 4]
	   print(l)
	
	  也可以添加各种功能:
	  names=['egon','alex_sb','kevin_sb','hxx_sb','cxx_sb']
	  sbs=[name.upper() for name in names if name.endswith('sb')]
	
2.字典生成式
	  res={i:i**2 for i in range(10) if i > 3}
	  print(res)
	
3.集合生成式
	  res={i for i in 'hello'}
	  print(res)
	
备注:
	  元组不能用生成式
	
五、匿名函数
      就是之定义了一个函数的内存地址,主要用于临时使用一次的场景
      自带ruturn功能,
	  res=(lambda x,y:x+y)(1,2)
	  print(res)
一般不会单独用,和别的函数配合使用:
  排序:
	  l=[4,2,3]
	  l_new=sorted(l,reverse=True)
	  print(l_new)
	  salaries={
      'egon':3000,
      'alex':100000000,
      'wupeiqi':10000,
      'yuanhao':2000
	  }
	  print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
	
	
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号