三元表达式 列表生成式 生成器生成式
三元表达式
什么是三元表达式?
可以将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>
#对比列表生成式,生成器表达式的优点自然是节省内存(一次只产生一个值在内存中)
#总结:列表生成式与生成器表达式优缺点以及应用场景
#列表生成式
#优点:因为其返回的是一个列表,所以可以依赖索引取值
#缺点:占用内存空间大(一次性将所有值读入内存),容易造成资源浪费
#生成器表达式
#优点:占用内存空间小,节省资源(一次只取一个值)
#缺点:去某个特定的值不方便
作者:池木
出处:https://home.cnblogs.com/u/a736659557/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。