🍖三元表达式、生成式(推导式)、生成器表达式

一.三元表达式

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