python--迭代器,生成器,三元表达式,列表解析,生成器表达式

  迭代:
    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__()

#每次只取一个值,节省内存。表达式格式必须用()包裹代码

你可能感兴趣的:(python基础)