常用内置函数,可迭代对象


内容概要

  • 结合匿名函数一起使用的函数
  • 可迭代对象
  • 迭代器对象
  • for循环内部本质
  • 异常捕获

常用内置函数

  • map() 映射
    l1 = [1, 2, 3]
    print(list(map(lambda x: x + 1, l1)))

  • zip() 拉链
    l1 = [4, 5, 6]
    l2 = [7, 8, 9]
    l3 = [1, 2, 3, 4, 5]
    print(list(zip(l1, l2, l3)))

  • max() 最大值
    l1 = [11, 66, 77, 99, 100]
    print(max(l1))

    def index(key):
    return dic[key]

    dic = {
    'sss': 100,
    'Aaa': 99,
    'ccc': 120
    }
    print(max(dic, key=lambda key: dic[key]))

  • min() 最小值
    l1 = [11, 66, 77, 99, 100]
    print(min(l1))

  • filter 过滤
    l1 = [10, 20, 30, 40, 50, 60]
    print(list(filter(lambda x: x < 30, l1)))

  • reduce 归总
    from functools import reduce
    l1 = [12, 34, 56, 78, 90]
    print(reduce(lambda x, y: x + y, l1))
    print(reduce(lambda x, y: x + y, l1, 120))

可迭代对象

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

  • 可迭代对象
    内置有__iter__方法的都成为可迭代对象

  • 针对双下划线开头,双下划线结尾的方法,最为标准的读法为
    双下方法名
    面向对象的时候为了与隐藏变量区分开

  • i = 11 # 没有
    f = 12.2 # 没有
    s = 'aaa' # 有
    l = [1, 2, 3] # 有
    d = {'name': 'ddd', 'age': 18} # 有
    q = (1, 2, 3) # 有
    sd = {2, 3, 4} # 有
    df = True # 没有
    z = open(r'1.txt', 'a', encoding='utf8') # 有

  • 含有__iter__的有
    字符串,列表,字典,元组,集合,文件类型
    上述通常为可迭代对象

  • print(d)
    print(d.iter())
    print(iter(d))
    print(d.len())
    print(len(d))

  • 可迭代对象调用__iter__方法会变成迭代器对象
    __iter__方法在调用的时候还有一个简便的写法iter()
    一般情况下所有的双下方法名都会有一个对应的简化版本,方法名()

迭代器对象

  • 迭代器对象
    即拥有__iter__方法有含有__next__方法

  • 如何生成迭代器对象
    让可迭代对象调用__iter__方法
    文本对象本身即是可迭代对象又是迭代器对象
    迭代器对象无论执行都少次__iter__方法还是迭代器对象(本身)
    迭代器对象给我们提供了不依赖于索引取值的方式

  • i = 11 # 没有
    f = 12.2 # 没有
    s = 'aaa' # 有
    l = [1, 2, 3] # 有
    d = {'name': 'ddd', 'age': 18} # 有
    q = (1, 2, 3) # 有
    sd = {2, 3, 4} # 有
    df = True # 没有
    z = open(r'1.txt', 'a', encoding='utf8') # 有
    res = s.iter()
    print(res.next())

  • 易错
    print(d.iter().next())
    print(d.iter().next())
    print(d.iter().next())
    print(d.iter().next())
    print(d.iter().next())

for循环的本质

  • for循环内部原理
    1.将关键字in后面的数据先调用__iter__方法转为可迭代对象
    2.循环执行__next__方法
    3.取完值之后__next__会报错,但for循环会自动捕捉该错误并处理

  • res = 数据__iter__()
    while True:
    检测代码是否会报错
    res.next()
    如果报错了会自动处理并结束while循环

异常捕获

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

  • 异常三个重要组成部分
    1.traceback
    反倒最下面从上往下第一个蓝色字体鼠标左键点击即可跳转到错误代码的所在行

    2.xxxError
    错误的类型

    3.错误类型冒号后面的内容
    错误的详细原因(很重要,仔细看完之后可能就会找到解决方法)

  • 错误的种类
    1.语法错误
    是不被允许的,出现了立即修改

    2.逻辑错误
    可以被允许的,出现尽快修复即可
    '''修改逻辑错误的过程就是从头到尾清理思路的过程'''

  • 基本语法结构
    try:
    有可能会出错的代码
    except 错误类型 as e:
    出错之后对应的处理机制(e是错误的详细信息)

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

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

  • 异常捕获句式和万能异常
    1.有可能会出错的代码才需要检测
    2.被检测的代码越少越好
    3.异常捕获使用频率越低越好

相关