Python基础17

可迭代对象

什么是可迭?

  言外之意就是更新换代,每次的更新都是依赖上一次的结果

什么是可迭代对象

  就是内置有__iter__()方法的都可以称之为可迭代对象

    内置:内部自带可以直接使用的

八种数据类型

  可迭代对象:

    字符串、列表、元组、字典、集合、文本对象

    整型、浮点型、布尔型都不是

 

代码

  可迭代对象调用__iter__方法就变成‘迭代器对象’

d = [1, 2, 3]
res = d.__iter__()
print(res)  # <list_iterator object at 0x0000021FA1D193F0>

  一般情况下,双下划线开头都方法都有一个预支对应的简化方式   名字+()

迭代器对象

什么是迭代器对象

  既内置iter()又内置了next()方法就是迭代器对象

  文件对象本身就具备__iter__()和__next__()方法,即是可迭代对象又是迭代器对象

迭代器对象数据类型

  str、list、dict、tuple、set、文件等

迭代器对象作用

  其实就是一种不依赖于索引取值的方式

  可迭代对象多次调用__iter__()方法之后还是迭代器对象,所以你只需要调用一次即可

d = [1, 2, 3]
d.__iter__().__iter__().__next__()
print(d.__iter__().__iter__().__next__())
d = [1, 2, 3]
res=d.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
# 打印值为123

易错题

复制代码
d = [1, 2, 3]
res = d.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
# 打印值为123

print(d.__iter__().__next__())
print(d.__iter__().__next__())
print(d.__iter__().__next__())
# 打印结果111
# 循环取出里面的值,iter()一次即可,多次iter()打印取出都是同一个值
复制代码

异常捕捉

什么是异常

  错误发生的信息,如不对此处理,那么以后的程序不能正常运行

异常的分类

  1.  Traceback

    是异常所在的位置,一般情况我们直接可以定位到异常发生的位置所在

  2. XXXError
    错误的类型
  3. XXXError后面的详细信息
    重要,一般情况我们直接看错误发生的详细信息

  4. 异常类型

    语法错误

      坚决不允许,容易解决,在Python编辑器就可以定位到

    逻辑错误

      是被允许出现的,但是我们写代码时,尽量避免逻辑错误发生

3.错误类型

复制代码
错误的类型
print(name) # NameError
l = [1,2,3,4]
print(l[5]) # IndexError

d = {'a':1}
print(d['b'])  # KeyError

1/0  # ZeroDivisionError
复制代码

4.如何解决异常

语法结构

复制代码
try
被监测的代码:一般是可能会发生的错误
    except 错误类型1 as e
           print(e)
    except 错误类型2 as e
        print(e)
    except 错误类型3 as e
        print(e)
    except 错误类型4 as e
         print(e)
复制代码
复制代码
try:
    # print(name)
    # 1/0
    # l = [1,2,3]
    # print(l[6])
    # 1/0
    d = {'a':1}
    print(d['aaa'])
except NameError as e:
    print(e) # name 'name' is not defined
except IndexError as e:
    print(e) # name 'name' is not defined
except Exception as e:
    print(e)
else:
    print('看一下else什么时候走的?')
finally:
    print('看一下finally什么时候走?')
复制代码

  没有异常else会走,有异常else不会走

  finally不管有没有异常都会走

复制代码
try:
    pass
except NameError:
    pass

try:
    pass
finally:
    pass

# 这里面你只需要记住try和else不能单独使用,
复制代码

assert:断言

  assert 条件 条件必须成立,如果不成立,代码在这一行直接中断

for循环的原理

复制代码
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 循环打印出列表中的每一个元素,但是不能使用for循环,必须要使用__next__()取值
res = l.__iter__()
while True:
    try:
        print(res.__next__())
    except Exception:
        break

for j in l:
    print(j)

count = 0
while count < len(l):
    if count == len(l):
        break
    else:
        # print(l[count])
        # count += 1
        print(res.__next__())
        count += 1
复制代码

for循环的原理

  1.先把关键字in后面的可迭代对象先调用inter()

  2.while循环,next()取值

  3.for的内部当出现异常的时候,做捕捉处理: stopiteration break

迭代取值和索引取值

迭代取值

  1.不依赖索引取值

  2.只能从左往右依次取值,不能重复取值

索引取值

  1.必须依赖索引取值

  2.可以重复取值

  3.必须容器类型数据

 

posted @   Py玩家  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示