• 装饰器和表达生成式


    from functools import wraps

    叠加多个装饰器:多个装饰器的加载顺序和执行顺序
    1.加载顺序:outter函数的调用过程:自下而上
    2.执行顺序:wrapper函数的执行顺序:自上而下
    @deco 在最上层执行时候在最内层,调用上一层,如果没有上一层则调用index
    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')
    index()

    有参装饰器:三层闭包函数
    import time


    login_status={'name':None,'status':False}

    def auth(engine='file'):
        def outter(func):
            def wrapper(*args,**kwargs):
                if login_status['name'] is not None:
                    res = func(*args,**kwargs)
                    return res
                name = input('username>>>:').strip()
                pwd = input('password>>>:').strip()
                if engine == 'file':
                    if name == 'egon' and pwd =='123':
                        print('login successful')
                        login_status['name'] = name
                        login_status['status'] = True
                        res = func(*args,**kwargs)
                        return res
                    else:
                        print('username or password error')
                elif engine == 'mysql':
                    pass
                elif engine == 'ldap':
                    pass
            return wrapper
        return outter


    @auth('file')
    def index():
        time.sleep(2)
        print('welcome to index page')

    index()

    三元表达式
    x=10
    y=20

    x if x > y else y
    生成式
        列表生成式
            l=[]
            for i in range(10)
            l.append(i)
            print(l)
            
            l = [i for i in range(10)]
            
        字典生成式
            l = {}  字典和集合
        元组没有生成式
            
    匿名函数与内置函数
        匿名函数就是只定义了一个函数的内存地址,主要用于临时使用一次的场景
        lambda x,y:x+y

    内置函数
        max()
        sorted 排序

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    python如何打开一个大文件?
    python中的多进程与多线程(二)
    python中的多进程与多线程(一)
    python中的深拷贝与浅拷贝
    2018 pycharm最近激活码
    python中的新式类与旧式类
    用python优雅打开文件及上下文管理协议
    解决Mac上安装mysqlclient的错误
    用python实现一个简单的服务器
    高阶函数
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10058571.html
Copyright © 2020-2023  润新知