• 035 高阶函数


    • 把函数作为参数使用的函数,叫高阶函数

    引子

    • 函数名可以类似变量那样使用

    例1

    >>> a = 10
    >>> b = a
    >>> b
    10
    >>> 
    >>> def func():
    ...   print("abc")
    ...
    >>> func()
    abc
    >>> new_func = func
    >>> new_func()
    abc
    >>> type(new_func)
    <class 'function'>
    >>> 
    

    例2

    • 在一个函数里调用另一个函数
    >>> def funcA(n):
    ...   return n + 1
    ...
    >>> def funcB(n):
    ...   return funcA(n) * 2
    ...
    >>> def funcC(n, f):
    ...   return f(n) % 5
    ...
    >>> funcC(5, funcB)
    2
    >>> 
    

    系统提供的高阶函数

    • Python2 与 Python3 用法有些许不同

    map

    • 映射,即把序列中每个元素都按照一定规则进行操作,生成一个新的序列的迭代对象

    例1 不用 map

    >>> a = list(range(10))
    >>> b = []
    >>> for i in a:
    ...   b.append(i * 10)
    ...
    >>> a
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> b
    [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
    >>> 
    

    例2 使用 map

    >>> mul_ten = lambda x: 10 * x
    >>> it = map(mul_ten, [1, 2, 3])
    >>> it
    <map object at 0x000002AD0F8C00B8>
    >>> for i in it:
    ...   print(i)
    ...
    10
    20
    30
    >>> 
    

    例3 map 配合 list

    >>> a = [1, 2, 3]
    >>> b = [4, 5, 6, 7]
    >>> list(map(lambda x, y: x + y, a, b))  # 类似 zip
    [5, 7, 9]
    >>> 
    

    例4 map 生成的迭代器只能迭代一次

    >>> a = map(lambda x: x * x, [1, 2, 3])
    >>> for i in a:
    ...   print(i)
    ...
    1
    4
    9
    >>> for i in a:
    ...   print(i)
    ...
    >>> 
    >>> b = map(lambda x: x * x, [1, 2, 3])
    >>> [i for i in b]
    [1, 4, 9]
    >>> [i for i in b]
    []
    >>> 
    

    filter

    • 过滤函数,对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回
    • map 相比
      • 同:都对序列的每个元素逐一进行操作
        • map 会生成一个跟原来数据相对应的新序列
        • filter 不一定,只有符合条件的才会进入新的数据集合
    • filter 函数的写法
      • 利用给定函数进行判断
      • 返回值一定是个布尔值
      • 调用格式:filter(f, data)
        • f 过滤函数
        • data 数据
    >>> list(filter(lambda x: x % 2, [1, 2, 3, 4, 5]))
    [1, 3, 5]
    >>> 
    

    reduce

    • functools 包提供
    • 把一个可迭代对象归并成一个结果
    • 对于作为参数的函数要求
      • 必须有两个参数
      • 必须要返回结果
    • reduce(f, [1, 2, 3]) 可以理解成 f(f(1, 2), 3)
    >>> from functools import reduce
    >>> reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
    15
    >>> 
    

    排序

    • 把一个序列按照给定算法进行排序
    • 格式:sorted(iterable, /, *, key=None, reverse=False)
    • key: 在排序前,对每一个元素进行 key 函数运算,可以理解成按照 key 函数定义的逻辑进行排序

    例1

    >>> sorted([1, 3, 5, 7, 9], reverse=True)
    [9, 7, 5, 3, 1]
    >>> 
    

    例2

    >>> sorted([9, -3, 0, 4, 8], key=abs)
    [0, -3, 4, 8, 9]
    >>> 
    

    例3

    >>> names = ["Tony black", "amy green", "Johnny Lee"]
    >>> sorted(names)
    ['Johnny Lee', 'Tony black', 'amy green']
    >>> sorted(names, key=str.lower)
    ['amy green', 'Johnny Lee', 'Tony black']
    >>> 
    
  • 相关阅读:
    用python写一个北京市的个税计算器
    排序算法(冒泡、选择)-python代码展示
    封装系统内置功能的函数(字符串)
    福彩习题
    打印等腰三角形
    1.冒泡排序法
    腾讯云:搭建 Node.js 环境
    python开发环境搭建
    基于 Ubuntu 搭建 FTP 文件服务
    TensorFlow — 相关 API
  • 原文地址:https://www.cnblogs.com/yorkyu/p/12070111.html
Copyright © 2020-2023  润新知