迭代器与常用内置函数

一、迭代器

  1.可迭代对象

    对象内置方法上可以有__iter__的数据类型我们都可以称之为可迭代对象,例如字符串str、列表list、字典dict、元组tuple、集合set和文件都是可迭代对象

  2.迭代器对象

    对象内置方法中既可以使用__iter__又可以使用__next__可以称为迭代器对象,只有文件本身就是迭代器对象,迭代器对象执行__iter__后还是迭代器对象,执行

    __next__后会从迭代器中的下一个值

    迭代器是一种可以不依赖于索引,可以迭代取值的方法,只要迭代器中还有值就可以一直取下去,没有值了就会报错

 

 

 

二、for循环原理

    1.for循环会将 in 后面的数据先调用__iter__转换为迭代器对象

    2.将迭代器对象执行__next__,取出迭代器中的值

    3.迭代器中没有值后,自动捕获该错误并处理

l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55]
res = l1.__iter__()
while True:
    try:
        res1 = res.__next__()
        print(res1)
    except Exception:
        break

 

     迭代取值与索引取值的对比

        迭代取值:

          优点:不依赖于索引的一种通用的取值方式

          缺点:取值的顺序永远是固定的从左往右,无法重复取值

        索引取值:

          优点:可以重复取值

          缺点:只能让有序容器类型使用索引取值(不是一种通用的方式)

 

三、异常捕获

    什么是异常:

      代码运行过程中错误就会出现异常,如果没有处理该异常,代码的运行就会终止。

    异常的种类:

      1.语法错误

        这种错误是不被允许的,这种错误应该在程序运行前就发现并改正。

      2.逻辑错误

        这种错误是可以允许的,出现后立即改正即可。

    异常的处理方式

        指名道姓的解决异常方式:

try:
    被检测的代码块
except NameError:
    触发NameError时对应的处理逻辑
except IndexError:
    触发IndexError时对应的处理逻辑
except KeyError:
    触发KeyError时对应的处理逻辑

        万能异常处理方式

try:
    被检测的代码块
except Exception:
    应对所有逻辑错误时对应的处理逻辑

  ps:有可能出现错误的代码才需要被监测,异常不用的使用频率越低越好

    异常捕获补充:

      

      try:
      被监测的代码
      except 错误类型 as e:
      ...
      else:
      被监测的代码不报错的时候执行
      finally:
      无论是否报错最终都会执行

      # 断言(了解)  判断类型是否正确
      name = 'jason'
      assert isinstance(name,str)

      # 主动报异常 例如CPU80度报一次异常,100度再报真正的异常
      raise 错误类型

 

四、内置函数

    1.map()映射

      括号内可以填两个元素,第一个元素填函数,第二个元素填若干列表,函数参数有几个就填几个列表

      循环获取列表中的每个元素并传递给函数后保存返回值

l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55]
print(list(map(lambda x: x + 1, l1)))

 

 

     

    2. zip()拉链  

    函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后保存该值。

    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同

l = [11, 22, 33, 44, 55, 66, 77]
name_list = ['jason', 'kevin', 'tony', 'jerry']
l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = [8, 7, 6, 4, 3, 2, 1]
res = zip(l, name_list, l1, l2)
print(list(res))

 

 

     3.max()min()

      该函数就是用来找括号中传入可迭代对象中的最大值与最小值

l = [11, 22, 33, 44, 55, 66, 77]
print(max(l))
print(min(l))

 

 

 

     4.filter()过滤

      括号内填两个参数,第一个参数填函数,第二个参数填可迭代对象,将可迭代对象的中的元素放入函数中进行判断,将True的元素返回成值并保存

l = [11, 22, 33, 44, 55, 66, 77]
res = filter(lambda x: x > 20, l)
print(list(res))

 

 

     5.reduce()归总

      在python3.x中想要使用reduce函数,必须先调用模块 from functools import reduce

        该内置函数有三个参数

          

      •     function -- 函数,有两个参数
      •     iterable -- 可迭代对象
      •     initializer -- 可选,初始参数  # 填写多少就在返回的结果上加上多少
      • 该函数的返回值是返回函数计算结果

 

from functools import reduce
l = [11, 22, 33, 44, 55, 66, 77] res = reduce(lambda x, y: x + y, l, 100) print(res)

 

 

 

      •  

 

posted @ 2021-11-19 16:59  椰子皮0oo0  阅读(55)  评论(0)    收藏  举报
1