ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python迭代器

2021-11-19 20:03:59  阅读:105  来源: 互联网

标签:__ .__ 迭代 python iter next print


一.可迭代对象

迭代

  即更新换代,每次的更新都必须依赖于上一次的结果

  迭代其实给我们提供了一种不依赖索引取值的方式

可迭代对象

  内置有__iter__方法的都称之为可迭代对象

  内置的意思是可以通过点的方式直接查看到

  针对双下滑线开头 双下滑线结尾的方法 最为专业标准的读法为:双下方法名

i = 1  # 没有
f = 11.11  # 没有
s = 'jason'  # 有
l = [1,2,3,4]  # 有
d = {'username':'tony','pwd':123}  # 有
t = (11,22,33)  # 有
se = {11,22,33}  # 有
b = True  # 没有
file = open(r'a.txt','w',encoding='utf8')  #有

  含有__iter__的有:字符串,列表,字典,元组,集合,文件对象

  上述通常称为可迭代对象

 

  可迭代对象调用__iter__方法会变成迭代器对象

  __iter__方法在调用的时候还有一个简便的写法iter()

  一般情况下所有的双下方法都会有一个与之对应的简化版本 方法名()

print(d)
print(d.__iter__())  # 等价于调用了一个内置方法 d.get()
print(iter(d))
print(d.__len__())
print(len(d))

二.迭代器对象

  迭代器对象:既含有__iter__方法 又含有__next__方法

  如何生成迭代器对象:让可迭代对象执行__iter__方法

    文件对象本身既是可迭代对象又是迭代器对象

  迭代器对象无论执行多少次__iter__方法 还是迭代器对象(本身)

  迭代器给我们提供了不依赖于索引取值的方式

l = [1,2,3,4]
res = l.__iter__()  # 转成迭代器对象
print(res.__next__())  # 迭代器对象执行__next__方法其实就是在迭代取值(for循环)
print(res.__next__())
print(res.__next__())
print(res.__next__())

print(res.__next__())  # 取完元素之后再取会"报错"

三.for循环的本质

  for循环内部原理

    1.将关键字in后面的数据先调用__iter__方法转为迭代器对象

    2.循环执行__next__方法

    3.取完之后__next__会报错 但for循环会自动捕获该错误并处理

res = 数据.__iter__()
while True:
    检测代码是否会报错
    res.__next__()
    如果报错了则自动处理掉并结束while循环
# 1.先将列表转为迭代器对象
res = l1.__iter__()
# 2.循环执行__next__取值
while True:
    print(res.__next__())
#等价于下面的代码
for i in l1:
    print(i)

四.异常捕获

  什么是异常?

    代码运行出错会导致异常,异常发生后如果没有解决方案则会导致整个程序结束

  异常的三个重要组成部分

    1.traceback

     翻到最下面从下往上第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行

    2.XXXError

     错误的类型

    3.错误类型冒号后的内容

     错误的详细原因(重要)

  错误的种类 

    1.语法错误

       不被允许的 出现了应该立刻修改!!!

    2.逻辑错误

     可以被允许的 出现了之后尽快修改即可

    '''修改逻辑错误的过程其实就是在从头到尾理清思路的过程'''

   

print(idna)  # NameError
l = [11,22,33]
print(l[100])  # IndexError
d = {'username':'jason'}
print(d['xxx'])  # KeyError
int('abc')  # ValueError

  基本语法结构

    try:

      有可能会出错的代码

    except 错误类型 as e:

      出错之后对应的处理机制(e是错误的详细信息)

    

try:
    int('abc')
except NameError as e:
    print('变量名name不存在',e)
except ValueError:
    print('值不是纯数字')

except StopIteration: #捕捉异常终止循环
        break

# 万能异常
try:
    # int('abc')
    print(name)
    # l = [11]
    # l[100]
except Exception:
    print('万能异常')

    异常捕获句式和万能异常

      1.有可能会出现错误的代码才需要被监测

      2.被监测的代码一定要越少越好

      3.异常捕获使用频率越低越好

标签:__,.__,迭代,python,iter,next,print
来源: https://www.cnblogs.com/TonyYu0821/p/15578912.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有