生成器:理解为一种数据类型,自动实现了迭代器协议(已经包含了__iter__,可以直接用next方法):
生成器函数:使用yield语句而不是return语句,yield一次返回一个结果,没个结果中间挂起函数状态,以便下次继续执行
生成器表达式:把列表解析 []改成()就变成生成器表达式,更省内存
l=[1,2,3,4,5] res=l.__iter__().__next__()
def test(): yield 1 yield 2 #相当于return但是能返回多次,生成器函数 yield 3 g=test() print(g) print(g.__next__()) print(g.__next__()) print(g.__next__()) print('$'*44) name='abc' res='sb' if name =='sxs' else 'sxj'#三元表达式 如果T则返回sb 如果F 则返回sxj print (res) print('#'*44) egg=[] for i in range(10): egg.append("鸡蛋%s"%i) print (egg) print('^'*55) #列表解析 egg2=['鸭蛋%s'%i for i in range(10)] egg3=['鸭蛋%s'%i for i in range(10) if i > 5 ] print(egg2) print(egg3) print('*'*55) jiji=('鸟蛋%s'%i for i in range(10))#生成器表达式 print(jiji) print(jiji.__next__()) print(jiji.__next__()) print(jiji.__next__()) print(next(jiji))
print(sum(i for i in range(101))) #生成器表达式