三元表达式、推导式和生成器表达式

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 练习

  1. 题目统计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()方法做累加,所以直接会把生成器里面的值做累加,但是同一时刻内存中只有一个值(一行的长度的累加值)
原文地址:https://www.cnblogs.com/xcymn/p/14107784.html