三元表达式 列表生成式 生成器生成式

三元表达式

什么是三元表达式?

可以将if...else分支语句合并为一行代码

为什么要使用三元表达式?

三元表达式是python为我们提供的一种简化代码的解决方案

怎么用三元表达式?

res = 条件成立返回的值 if 判断条件 else 条件不成立返回的值

应用场景

#不使用三元表达式方法
def max2(x, y):
    if x > y:
        return x
    else:
        return y


res = max2(1, 2)
print(res)
#结果为
2


#使用三元表达式时
x = 1
y = 2
res = x if x > y else y
print(res)
#结果为
2

# 需求: 让用户输入用户名,输入的用户如果不是bing缀添加_DSB
username = input('请输入你的用户名:')
res = username if username == 'bing' else username + '_DSB'
print(res)

列表生成式

什么是列表生成式?

可以一行实现生成列表。

为什么要使用列表生成式?

列表生成式是python为我们提供的一种简化代码的解决方案 , 用来快速生成列表

怎么用列表生成式?

语法:

list = [取出的每一个值,任意值+ for + 可迭代对象中取出的每一个值 in 可迭代对象]

for的右边是循环次数,并且可以取出可迭代对象中每一个值# for的左边可以为当前列表添加值

应用场景

#不使用列表生成式
egg_list = []
for i in range(10):
    egg_list.append('鸡蛋%s' % i)

print(egg_list)
#结果为
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

#使用列表生成式
egg_list = ['鸡蛋%s'%i for i in range(10)]
print(egg_list)
#结果为
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

生成器表达式(生成式)

创建一个生成器对象有两种方式,一种是调用带yield关键字的函数,另一种就是生成器表达式,与列表生成的语法格式相同,只需将[]换成()

语法:

() ---> 返回生成器

(line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

生成器表达式与列表生成器的对比
#1.对比列表生成式返回的是一个列表,生成器表达式返回的是一个生成器对象
list = [x*x for x in range(3)]
print(list)
g = (x*x for x in range(3))
print(g)
#结果为
[0, 1, 4]
<generator object <genexpr> at 0x000001E821B321C8>
#对比列表生成式,生成器表达式的优点自然是节省内存(一次只产生一个值在内存中)

#总结:列表生成式与生成器表达式优缺点以及应用场景
#列表生成式
#优点:因为其返回的是一个列表,所以可以依赖索引取值
#缺点:占用内存空间大(一次性将所有值读入内存),容易造成资源浪费
#生成器表达式
#优点:占用内存空间小,节省资源(一次只取一个值)
#缺点:去某个特定的值不方便

猜你喜欢

转载自www.cnblogs.com/a736659557/p/11892382.html