1. 程式人生 > >疊加多個裝飾器,列表生成式,字典生成式,匿名函式

疊加多個裝飾器,列表生成式,字典生成式,匿名函式

一. 疊加多個裝飾器

  1. 載入順序: (outter 函式的呼叫順序): 自下而上

  2. 執行順序: (wrapper函式的呼叫順序): 自上而下

def outter1(func1):   func1= wrapper 2 的記憶體地址
    print(' 載入了outter1')
    def wrapper1(* args, **kwargs):
        print(' 執行了wrapper1')
        res1=func1(* args, **kwargs)
        print(1111)
        return res1
    
return wrapper1 def outter2(func2): func2=wrapper3 的記憶體地址 print('載入了outter2') def warpper2(* args, **kwargs): print('執行了wrapper2') res2=func2(* args, **kwargs) print(2222) return res2 return wrapper2 def outter3(func3): #fun3=最原始的那個index記憶體地址 print
('載入了outter2') def wrapper3(* args, **kwargs): print('執行了wrappr3') res3=func3(* args, **kwargs) print(3333) return res3 return wrapper3 @outter1 @outter2 @outter3 def index(): print('from index') index()

# 執行順序: 從上到下

二. 三元表示式

def max2(x,y):
    if x>y:
        
return x else: return y res=max2(10, 20) # 三元表示式 res=x if x>y else y print(res)

三.  列表生成式 & 字典生成式

L=[]
for i in range(10):
    if i>4:
        L.append(i**2)

L=[i**2 for i in range(10) if i >4]


# 字典生成式
res={i:i**2 for i in range(10) if i>3}

# 集合生成式

res={i for i in 'hello'}

四. 匿名函式: 只定義了一個函式的記憶體地址,主要用於臨時一次的場景

lambda x,y: x+y    # lambda 函式自帶return值

res=(lambda x, y: x+y)(1,3)   # 結果為4

salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
}

# 求出薪資最高的人名
def func(k):
  return salaries[k]  

print(max(salaries,key=func))  
max 底層for 迴圈

print(max(salaries, key=lambda k:salaries[k])

sorted 函式
底層for 迴圈

sorted(salaries,key=lambda k:salaries[k], reverse=True)