迭代:
1 重复
2 下一次重复是基于上一次的结果
python为了提供一种不依赖于索引的迭代方式,
python会为一些对象内置__iter__方法
obj.__iter__称为可迭代的对象
#obj.__iter__() 得到的结果就是迭代器
#得到的迭代器:既有__iter__又有一个__next__方法
# i=d.__iter__() #i叫迭代器
#迭代器的优点
#1:提供了一种不依赖于索引的取值方式
#2:惰性计算。节省内存
#迭代器的缺点:
#1:取值不如按照索引取值方便
#2:一次性的。只能往后走不能往前退
#3:无法获取长度
=============================================================================================
#生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器
yield的功能:
1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
==========================================================================
if x > y:
print(x)
else:
print(y)
x if x>y else y#三元表达式
============================================================
列表解析l=[1,31,73,84,57,22]
# l_new=[]
# for i in l:
# if i > 50:
# l_new.append(i)
# print(l_new)
#
# res=[i for i in l if i > 50]#列表解析
# print(res)
=============================================================
生成器表达式g=(i for i in range(100000000000000000000000000000000000000000000000000))
print(g)
print(next(g)) #next(g) == g.__next__()
print(next(g)) #next(g) == g.__next__()
print(next(g)) #next(g) == g.__next__()
print(next(g)) #next(g) == g.__next__()
print(next(g)) #next(g) == g.__next__()
#每次只取一个值,节省内存。表达式格式必须用()包裹代码