高阶函数

(1)迭代器:

​ 概念:能被next()函数调用,并不断返回下一个值的对象,叫做迭代器(迭代器是对象)

​ 特征:不依赖索引,通过next指针迭代所有数据,一次只取一个,可以大大节省空间,迭代无限量的数据

  • 可迭代对象:

​ 如果成员中含有__iter__这个方法,就是可迭代对象

​ dir函数可以查看一个对象中所有的成员

(2)迭代器:

  • 迭代器的定义:

    ​ 通过iter()方法定义迭代器

    ​ 通过可迭代对象.__iter__()定义迭代器

  • 判断迭代器:如果内置成员中含有__iter__和__next__两个方法,就可判断是一个迭代器

  • 调用迭代器

    ​ 方式一:next(迭代器)

    ​ 方式二:迭代器.__next__()

    ​ 注:迭代器通过next方法调用时,是单相不可逆的过程

  • 重置迭代器

​ 重新定义:使用next调用,单项不可逆,所以需要使用iter()重新定义

  • 使用Iterator和Iterable来判断是否是迭代器

    from collections import Iterator,Iterable 使用from … import … 引入

    Iterator迭代器类型 Iterable 可迭代对象

  • 注:迭代器一定是可迭代对象,但可迭代对象不一定是迭代器

    # 判断可迭代对象
    setvar = {"a", 1, "b", 2}
    for i in setvar:
        print(i)
    res = dir(setvar)
    print(res)
    
    # 定义迭代器
    setvar = {"a", 1, "b", 2}
    it = iter(setvar)
    print(it)
    
    # 判断迭代器
    print(dir(it))
    res = "__iter__" in dir(it) and "__next__" in dir(it)
    print(res)
    
    # 调用迭代器
    res = next(it)
    print(res)
    
    # 重置迭代器
    it = iter(setvar)
    res = next(it)
    ret = iter(setvar)
    res = next(it)
    print(res)
    
    # 导入模块判断迭代器和可迭代对象
    from collections import Iterator,Iterable
    setvar = {"a", "b", "c"}
    res = isinstance(setvar, Iterator)
    print(res)
    ret = isinstance(setvar, Iterable)
    print(ret)
    
    it = iter(range(5))
    res = isinstance(it, Iterator)
    print(res)
    ret = isinstance(it, Iterable)
    print(ret)
    
    # 通过next获取迭代器中的数据
    res = next(it)
    print(res)
    
    # for循环遍历迭代器
    it = iter(range(6))
    for i in it:
        print(i)
    
    # for和next配合调用迭代器
    it = iter(range(100000))
    for i in range(10):
        res = next(it)
        print(res)
    
    for i in range(10):
        res = next(it)
        print(res)
    

(3)高阶函数:能够把函数当成参数传递的就是高阶函数 map filter reduce sorted

  • map(func,iterable)

    功能:把iterable里面的数据一个一个拿出来,放到func函数中进行处理,把处理的结果扔到迭代器中,返回迭代器。

    func:自定义函数或内置函数

    iterable:可迭代对象(容器类型数据,range(),迭代器)

    返回值:迭代器

    lst = ['1', '2', '3']
    lst_new = []
    for i in lst:
        res = int(i)
        lst_new.append(res)
    print(lst_new)
    
    # map的使用
    from collections import Iterator, Iterable
    it = map(int, lst)
    res = isinstance(it, Iterator)
    print(res)
    res = next(it)
    print(res)
    
    it = map(int, lst)
    for i in it:
        print(i)
    
    it = map(int, lst)
    for i in range(2):
        print(next(it))
    
    it = map(int, lst)
    lst = list(it)
    print(lst)
    
    
  • filter(func,iterable)

    功能:在定义的函数中,过滤数据;若返回True代表保留数据;若返回False代表舍弃该数据

    func:自定义函数

    iterable:可迭代性数据(容器类型数据,range(),迭代器)

    返回值:迭代器

    from collections import Iterator, Iterable
    lst = [1, 2, 3, 4, 5, 6, 7, 8]
    lst_new = []
    for i in lst:
        if i % 2 == 1:
            lst_new.append(i)
    print(lst_new)
    
    # filter
    def func(n):
        if n % 2 == 0:
            return False
        else:
            return True
    it = filter(func, lst)
    res = isinstance(it, Iterator)
    print(res)
    print(list(it))
    
  • reduct(func, iterable)

    功能:一次性从iterable当中取出两个值,扔到func函数中进行处理,把运算的结果再和iterable的第三个值继续扔到func中做运算,依次类推,最后返回计算的结果

    func:自定义函数

    iterable:可迭代性数据(容器类型数据,range(),迭代器)

    返回值:最后计算结果

    注:需要导入模块 from functools import reduce

    lst = [5, 4, 8, 8]
    strvar = ""
    for i in lst:
        strvar += str(i)
    print(strvar, type(strvar))
    intvar = int(strvar)
    print(intvar, type(intvar))
    
    it = iter(lst)
    num1 = next(it)
    num2 = next(it)
    print(num1)
    print(num2)
    total = num1 * 10 + num2
    print(total)
    for i in it:
        total = total * 10 + i
    print(total, type(total))
    
    from functools import reduce
    lst = [5, 4, 8, 8]
    def func(x, y):
        return x * 10 + y
    res = reduce(func, lst)
    print(res, type(res))
    
    print(reduce(lambda x, y: x * 10 + y, lst))
    
  • sorted(iterable,reverse=False, key = 函数)

    功能:排序

    iterable:可迭代性数据(容器类型数据 range对象 迭代器)

    reverse:代表是否倒叙 reverse=True 代表倒叙 从大到小 reverse = False 代表正序,从小到大

    key:自定义函数 或 内置函数

    返回值:排序后的列表(新列表)

    # sorted
    container = [100, 200, 13, -6, 0]
    container = (100, 200, 13, -6, 0)
    container = {100, 200, 13, -6, 0}
    container = "oneal"
    container = {"a": 1, "b": 2, "c": 3}
    
    lst_new = sorted(container)
    print(lst_new)
    
    # 自定义函数排序
    let = [19, 27, 35, 48]
    def func(n):
        return n % 10
    res = sorted(lst, key=func)
    res = sorted(lst, key=lambda n: n % 10)
    print(res)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值