python3 三元运算,列表解析,生成器表达式

什么是生成器
可以理解为一种数据类型,自动实现了迭代器协议,所以生成器就是可迭代对象
#只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码
生成器函数:常规函数定义,但是使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在这个结果中间挂起函数的状态,以便下次从它离开的地方继续执行

def test():
    yield 1
    yield 2
    yield 3
g=test()
print('来自函数',g)

生成器表达式: 类似于列表推导

三元表达式:

返回值在条件前面 'SB' if name == 'children' else '帅哥'

name='children'
res= 'SB' if name == 'alex' else '帅哥'
print(res)

运行结果
SB

列表解析:

一个正常的for循环函数

egg_list=[]
for i in range(10):
    egg_list.append('鸡蛋%s' %i)
print(egg_list)

但是这个函数可以一条语句写完,这个就是列表解析

egg=['鸡蛋%s' %i for i in range(10)]
print(egg)

注意格式:输出内容在前,然后循环在后

列表解析也可以套用三元表达式

egg=['鸡蛋%s' %i for i in range(10) if i >5 ]
print(egg)

输出i大于5 的
['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

列表解析如何和生成器结合起来?

把[]改为()即可

laomuji=('鸡蛋%s' %i for i in range(10))

这样就可以迭代了
这样的就叫生成器表达式

生成器只能遍历一次

总结:
把列表解析的[]换成()就是生成器表达式了
列表解析与生成器表达式都是一种遍历的编程方式,但是生成器表达式更节省内存
Python 不但使用迭代器协议,让for循环变得更加通用。大部分内置函数也是使用迭代器访问对象的。例如sum函数,map函数,reduce函数

print(sum(x**2 for x in range(4))) #不需要先生成列表,节省内存空间
而不用多次一句先构造一个列表
print(sum([x**2 for x in range(4)]))#因为先要生成列表,所以需要更大的内存

猜你喜欢

转载自www.cnblogs.com/children92/p/9240747.html