补充叠加多个装饰器:加载顺序与执行顺序+迭代器+自定义迭代器的方式:生成器+三元表达式

# 迭代器
# 1,什么事迭代器
# 迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的
# 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖索引取值

# while True:
# print('-------->') #这是单纯的重复

# l=['alex','blex','clex','dlex']
# count = 0
# while count<len(l):
# print(l[count])
# count+=1



# 2,为何要用迭代器
# 就是为了找出一种通用的不依赖索引取值迭代取值方式

# 3,如何用迭代器
# 可迭代的对象:在python中但凡内置有.__iter__方法的对象,都称之为可迭代的对象
# (字符串,列表,元组,字典,集合,文件)
# x='hello'
# x.__iter__()
#
# l=['alex','blex','clex','dlex']
# l.__iter__()
#
# t=('alex','blex','clex','dlex')
# t.__iter__()
#
# dic={'name':'zrg','age':24,'sex':'male'}
# dic.__iter__()
#
# pythons = {'alex','blex','clex','dlex'}
# pythons.__iter__()
#
# f=open(r'a.txt',mode='rt',encoding='utf-8')
# f.__iter__()
# f.close()

# 迭代器对象:既内置有.__iter__方法又内置有.__next__方法
# (文件)

# 可迭代对象可以转换成迭代器对象:调用可迭代对象的内置.__iter__方法会有一个返回值,该返回值就是迭代器对象

# l=['alex','blex','clex','dlex']
# iter_l=l.__iter__()
# res1=iter_l.__next__()
# print(res1) #alex
# res2=iter_l.__next__()
# print(res2) #blex

# while True:
# try:
# print(iter_l.__next__())
# except StopIteration:
# break

"""
alex
blex
clex
dlex
"""
# while True:
# try:
# print(next(iter_l))
# except StopIteration:
# break

# class Fibs:
# def __init__(self):
# self.a=0
# self.b=1
# def __int__(self):
# self.a = 0

# 如果取值取干净了,会报异常

# dic={'name':'zrg','age':24,'sex':'male'}
# iter_dic=dic.__iter__()
# while True:
# try:
# print(iter_dic.__next__())
# except StopIteration:
# break

# f=open(r'D:\zrg\day12\作业.py',mode='rt',encoding='utf-8')
# while True:
# try:
# print(f.__next__())
# except StopIteration:
# break
#
# f.close()

# for 循环:迭代器循环
# 工作原理:
# info = {'name':'zrg','age':18,'is_beautiful':True,'sex':'male'}
# for k in info: # for循环对象会将in后面的对象变成迭代器对象(in后跟的一定要是可迭代对象)
# in 后跟的可迭代对象会在for循环开始自动调用可迭代对象的__iter__方法,会拿到一个迭代器对象
# 然后for循环,next一次取一次值给k,然后执行一次循环体代码,next一次取一次值给k,然后再执行一次循环体代码,直到取干净,for循环自动检测到异常,捕捉到异常之后结束循环
# print(k)



# 总结迭代器
# 优点:
# 1,提供了一种通用的可以不依赖索引的取值方式
# 2,同一时刻的内存中只有一个值,更加节省空间

# 缺点:
# 1,取指定的值不如索引灵活,并且迭代器是一次性的
# 2,无法预知迭代器数据的个数


# 关于迭代器
# 调用可迭代对象的__iter__会得到一个迭代器对象
# 调用迭代器对象的__next__得到的是迭代器的下一个值
# 调用迭代器对象的__iter__得到的会是迭代器本身


# dic=iter({'name':'zrg','age':24,'sex':'male'})
# while True:
# try:
# print(next(dic))
# except StopIteration:
# break

猜你喜欢

转载自www.cnblogs.com/zhangrenguo/p/9721835.html
今日推荐