zoukankan      html  css  js  c++  java
  • 🍖三元表达式、生成式(推导式)、生成器表达式

    一.三元表达式

    1.三元表达式适用于

    • 条件成立返回一个值
    • 条件不成立返回一个值

    2.判断两个数的大小

    使用函数来写代码
    def max2(x,y):
        if x > y:
            return x
        else:
            return y
    res = max2(3,4)
    print(res)       # 4
    
    使用三元表达式
    x = 3
    y = 4
    res = x if x > y else y
    print(res(3,4))  # 4
    
    函数加三元表达式
    def max2(x,y):
        return "ok" if x > y else "no"
    print(max2(3,4)) # no
    

    二.生成式(推导式)

    1.列表生成式(推导式)

    使用 "for" 循环实现
    l = []
    for i in range(6):
        l.append(i)
    print(l)    # [0, 1, 2, 3, 4, 5]
    
    生成式一行实现
    l = [i for i in range(6)]
    print(l)    # [0, 1, 2, 3, 4, 5] 
    
    • 示例小练习
    names = ["songhh","shawnhh","hai","xing"]
    
    将"hh"结尾的放入一个列表
    l = [len(i) for i in names if i.endswith("hh")]
    print(l)    # ['songhh', 'shawnhh']
    
    将其劝变为大写
    l = [i.upper() for i in names]
    print(l)    # ['SONGHH', 'SHAWNSHH', 'HAI', 'XING']
    
    • 小练习2
    打印文件中字符的最长长度
    with open(r"a.txt","rt",enconding="utf-8")as f:
        nums = [len(i) for i in f]
        print(max(nums))
    

    2.字典生成式(推导式)

    
    res = {i:i for i in range(3)}
    print(res)  # {0: 0, 1: 1, 2: 2}
    
    
    info = {"name":"shawn","age":18,"sex":"man"}
    res = {k:v for k,v in info.items()}
    print(res)  # {'name': 'shawn', 'age': 18, 'sex': 'man'}
    

    3.集合生成式(推导式)

    sets = {i for i in range(9) if i >4}
    print(sets)        # {8, 5, 6, 7}
    print(type(sets))  # <class 'set'>  
    

    三.生成器表达式

    1.创建生成器的两种方式

    • 调用带 yield 关键字的函数
    • 使用生成器表达式

    2.生成器表达式 列表生成式

    • 语法 : 语法类似, 生成器表达式使用 ( ), 列表生成式使用 [ ]
    • 返回值 :
      • 列表生成式返回一个列表
      • 生成器表达式返回一个生成器对象
    • 内存占用 :
      • 列表生成式返回的列表元素直接放在内存中
      • 生成器表达式返回的是生成器, 一次只产生一个值, 更节省空间

    3.生成器表达式示例

    • 小示例1:
    制作一个生成器
    res = (i for i in range(6))
    print(res)
    print(next(res))  # 0
    print(next(res))  # 1
    print(next(res))  # 2
    print(next(res))  # 3
    print(next(res))  # 4
    print(next(res))  # 值取完抛出异常 StopIteration
    
    打印文件里字符最长长度 (切换 "b" 模式比较字节)
    with open(r"a.txt","rt",encoding="utf-8")as f:
        res = (len(i) for i in f)  # 得到一个生成器
        print(res)        # <generator object <genexpr> at 0x000001949AD7AAC8>
        print(max(res))
    
    • 小示例2:
    统计文件的字符个数 (切换 "b" 模式统计字节)
    with open(r"aaa.txt","rt",encoding="tuf-8")as f:
        lens = 0
        for i in f:
            lens += len(i)
        print(lens)
        
    使用列表生成式 "[ ]" 配合 "sum( )" 函数
    res = sum([len(i) for i in f])
    print(res)
    
    使用生成器表达式 "( )" 配合 "sum( )" 函数
    res = sum((len(i) for i in f))
     "sum( )"会自动迭代取出生成器对象里面的值进行相加, so 可以不用加两层括号
    res = sum(len(i) for i in f)
    print(res)
    
  • 相关阅读:
    c# 第41节 异常处理
    c# 第40节 密封类、密封方法
    c# 第39节 抽象类、抽象方法
    c# 第38节 接口的实现
    c# 第37节 接口的实现与继承
    c# 第36节 接口的声明
    测试面试题集-接口测试
    Python接口自动化测试系列文章汇总
    Jmeter系列之简介与环境安装
    Python接口自动化之logging封装及实战
  • 原文地址:https://www.cnblogs.com/songhaixing/p/14104886.html
Copyright © 2011-2022 走看看