叠加多个装饰器,列表生成式,字典生成式,匿名函数

一. 叠加多个装饰器

  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)
    
原文地址:https://www.cnblogs.com/Afrafre/p/10059582.html