1. 三元表达式
三元表达式是python为我们提供的一种简化简单的流程控制的解决方案
而且在简化代码的基础上,还不失代码的可读性
1.1 语法
# 条件成立时返回的值 if 条件 else 条件不成立时返回的值
x if x > y else y
# 如果x>y就执行x,否则执行y
1.2 比大小
需求 : 接收两个数字,返回较大的那个数
# 不采用三元表达式
def my_max(x,y):
if x > y:
return x
else:
return y
# 采用三元表达式
def my_max(x,y):
return x if x > y else y
应用场景 : 当遇到条件成立就执行什么,条件不成立就执行什么,像这种只有两种情况就可以用三元表达式简化代码
2. 推导式
2.1 列表推导式
列表推导式是python为我们提供的一种简化代码的解决方案,用来快速生成列表,语法如下
l = [ i for i in 可迭代对象 if 条件 ]
# 内部执行顺序
l = []
for i in 可迭代对象:
if 条件成立
l.append(i)
举个栗子 : 一条代码生成一个列表,包含0-100之间的所有偶数
l = [ i for i in range(1,101) if i % 2 == 0 ]
print(l)
2.2 集合推导式
集合推导式python为我们提供的一种简化代码的解决方案,用来快速生成集合,语法如下
s = { i for i in 可迭代对象 if 条件 }
# 内部执行顺序
s = set()
for i in 可迭代对象:
if 条件成立
l.add(i)
举个栗子 : 一条代码生成一个集合,包含0-100之间的所有奇数
s = { i for i in range(1,101) if i % 2 == 1 }
print(s)
2.3 字典推导式
字典推导式python为我们提供的一种简化代码的解决方案,用来快速生成字典,语法如下
dic = { k:v for k,v in 可迭代对象 if 条件 }
# 内部执行顺序
dic = {}
for k,v in 可迭代对象:
if 条件成立
dic[k] = v
举个栗子 : 一条代码生成一个字典,key是0-100之间的奇数,value是0-100之间的偶数
dic = { k: k+1 for k in range(1,102) if k % 2 == 1}
print(dic)
3. 生成器表达式
3.1 语法
创建一个生成器对象有两种方式,一种是调用带yield关键字的函数
,另一种就是生成器表达式
,与列表生成式的
语法格式相同,只需要将[]
换成()
,即:
g = ( i for i in range(1,10) if i % == 2)
print(g) # 得到一个生成器,
3.2 练习
- 题目统计demo.txt里面的字符个数
# 以前的写法
with open('demo.txt', mode='r', encoding="utf-8") as f:
count = 0
for line in f:
count += len(line)
print(count)
# 生成器写法
f = open('demo.txt', mode='r', encoding="utf-8")
# 一行代码解决,这就是python的nb之处,但是这样写可读性不好
total = sum((len(line) for line in f ))
# 这句代码牛逼了,首先(len(line) for line in f)是没有运行的,但是会返回一个生成器,
# sum这个内置函数,会把可迭代对象里面的值遍历即for循环,即调用next()方法做累加,所以直接会把生成器里面的值做累加,但是同一时刻内存中只有一个值(一行的长度的累加值)