ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

三元表达式及匿名函数

2022-07-07 22:32:15  阅读:130  来源: 互联网

标签:index res 匿名 l2 def l1 print 三元 表达式


目录

  • 三元表达式

  • 列表生成式

  • 字典生成式

  • 匿名函数

  • 三元表达式

    """
    语法结构
    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()

    
    
    

     

标签:index,res,匿名,l2,def,l1,print,三元,表达式
来源: https://www.cnblogs.com/040714zq/p/16456268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有