目录

  • 三元表达式

  • 列表生成式

  • 字典生成式

  • 匿名函数

  • 三元表达式

    """
    语法结构
    if条件成立时则执行返回值
    if条件不成立时则执行else的返回值
    return 条件成立时的返回值 if 条件 else 条件不成立时的返回值
    """
    def user_info(name,password):
        if name == 'jason' and password == '123':
            return 123
        return 321
    res = user_info('jason','123')
    print(res)
    def user_info(name,password):
        return 123 if name == 'jason' and password == '123' else 321
    res = user_info('jason','123')
    print(res)

    列表生成式

    """
    新列表等于改变条件for循环旧列表中的数
    l2 = [i for i in range(5)]
    """
    l1 = [0, 1, 3, 5, 7, 13]
    # 将取出的数据放入新的列表
    # 创建新的列表
    l2 = []
    for i in range(5):
        l2.append(i)
    print(l2)    # [0, 1, 2, 3, 4]
    l2 = [i for i in range(5)]
    print(l2)    # [0, 1, 2, 3, 4]

    字典生成式

    username = {i: 'kevin' for i in range(10)}
    print(username)

    集合生成式

    l1 ={i for i in range(100) if i == 33}
    print(l1)

    匿名函数

    1.定义:没有函数名的函数
    2.语法结构:lambda 形参:返回值
    lambda x:x*10
    res = lambda x: x*10
    print(res(20))
    
    
    lambda name: 'jason'
    res = lambda name: 'jason'
    print(res('name'))
    3.匿名集合内置函数的使用
    3.1 max()最大值
    l1 = [10, 99, 89, 123, 157]
    print(max(l1))
    3.2 min()最小值
    l1 = [10, 99, 89, 123, 157]
    print(min(l1))
    3.3 map()映射
    l1 = [12, 15, 22, 34]
    # 给列表中每个值加20 for循环
    l2 = []
    for i in l1:
        i1 = i + 20
        l2.append(i1)
    print(l2)
    # 列表生成式
    l2 = [i+20 for i in l1]
    print(l2)
    # map()
    res = map(lambda i: i+20,l1)
    print(res)  # <map object at 0x000001DE8217AC88>
    print(list(res))   # [32, 35, 42, 54]
    3.4 filtre()移除
    l1 = [12, 15, 22, 34]
    res = filter(lambda i:i == 22, l1)
    print(res)    # <filter object at 0x00000266259F0408>
    print(list(res))  # [22]
    3.5 reduce()对序列中的元素进行累计返回函数的计算结果
    l1 = (1, 2, 3, 5, 8)
    from functools import reduce
    def add(x,y):
        return x+y
    print(reduce(add,l1))  # 19
    3.6 zip()用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象
    l1 = [1, 3, 7, 9]
    l2 = ['a', 'b', 'c', 'd']
    res = zip(l1, l2)
    print(res)  # <zip object at 0x000002AF01FC0588>
    print(list(res))  # [(1, 'a'), (3, 'b'), (7, 'c'), (9, 'd')]
    
    
    l1 = [1, 3, 7, 9, 34, 45]
    l2 = ['a', 'b', 'c', 'd']
    res = zip(l1, l2)
    print(res)  # <zip object at 0x000002AF01FC0588>
    print(list(res))  # [(1, 'a'), (3, 'b'), (7, 'c'), (9, 'd')]
    
    
    l1 = (1, 3, 7, 9, 34, 45)
    l2 = ('a', 'b', 'c', 'd')
    l3 = (9, 13, 45)
    res = zip(l1, l2, l3)
    print(res)  # <zip object at 0x0000026A7F07AF88>
    print(list(res))  # [(1, 'a', 9), (3, 'b', 13), (7, 'c', 45)]

    作业

    每个人将多层装饰器及有参装饰器的执行流程用文字具体描述出来
    1.多层装饰器
    多个装饰器运用到一个函数身上,运行顺序看被装饰函数身上有几个语法糖,以紧挨被装饰函数的语法糖从上往下执行,遇到最后一个才使用相同变量名传给装饰器函数使用,语法糖的使用时会自动将紧挨着函数名当做参数传递给@符号后面的函数名加括号调用
    定义:
    1.先执行紧挨被装饰函数的语法糖@outter3,传入wrapper3=outter3(index)执行func3=(真正的index函数)执行print('加载了outter3')
    2.再执行语法糖@outter2,传入wrapper3=outter2(wrapper3)执行func2=wrapper3的函数,执行print('加载了outter2')
    3.其次执行语法糖@outter1,传入indec=outter1(wrapper2)执行func1=wrapper2执行print('加载了outter1')
    调用:
    1.调用index(),index时wrapper1,执行print('执行了wrapper1')
    2.func1=wrapper2,执行 print('执行了wrapper2')
    3.func2=wrapper3,执行print('执行了wrapper3')
    4.func3=真正的index函数,执行print('from index')
    def outter1(func1):
        print('加载了outter1')
        def wrapper1(*args, **kwargs):
            print('执行了wrapper1')
            res1 = func1(*args, **kwargs)
            return res1
        return wrapper1
    
    def outter2(func2):
        print('加载了outter2')
        def wrapper2(*args, **kwargs):
            print('执行了wrapper2')
            res2 = func2(*args, **kwargs)
            return res2
        return wrapper2
    
    def outter3(func3):
        print('加载了outter3')
        def wrapper3(*args, **kwargs):
            print('执行了wrapper3')
            res3 = func3(*args, **kwargs)
            return res3
        return wrapper3
    
    
    @outter1   index = outters1(outters2)
    @outter2   outters2 = outters2(outters3)
    @outter3   outtres3 = outters3(index)
    def index():
        print('from index')

    2.有参装饰器
    由于装饰器内部数据来源存在多种,给装饰器传递多余的参数,所以要通过传值方式实现这种功能,传参方式通过闭包函数在外层加函数并传入形参。
    步骤:
    1.首先通过闭包函数传参,调用函数index(),执行函数上方语法糖@outer('文件','jason')由于函数名加括号执行优先级最高,执行outer('文件','jason'),文件传给形参condition,执行def login_auth(func_name),返回值login_auth
    2.其次执行语法糖@longin_auth,执行函数longin_auth,返回值inner,执行inner函数,输出print('from index')获得用户输入信息,判断数据来源条件,输入的位置形参是('文件','jason'),打开文件with open(r'a.txt','r',recoding='utf8')as f:调取数值比对,正确输出输出printprint('使用文件作为数据来源 比对用户数据'),姓名比对正确输出print('VIP')
    def outer(condition,type_user):
    def login_auth(func_name): # 这里不能再填写其他形参
    def inner(*args, **kwargs): # 这里不能再填写非被装饰对象所需的参数
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 应该根据用户的需求执行不同的代码
    if type_user =='jason':print('VIP')
    if condition == '列表':
    print('使用列表作为数据来源 比对用户数据')
    elif condition == '字典':
    print('使用字典作为数据来源 比对用户数据')
    elif condition == '文件':
    print('使用文件作为数据来源 比对用户数据')
    else:
    print('去你妹的 我目前只有上面几种方式')
    return inner
    return login_auth
    @outer('文件','jason') index = outer(index) index = login_auth(index)
    def index():
    print('from index')
    index()

    
    

     

 posted on 2022-07-07 22:23  拾荒菇凉  阅读(122)  评论(0)    收藏  举报