裝飾器補充、三元表達式、生成式、匿名函數

 

一、疊加多個裝飾器


  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))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章