一.三元表达式
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']
打印文件中字符的最长长度
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.生成器表达式示例
制作一个生成器
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))
统计文件的字符个数 (切换 "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)