zoukankan      html  css  js  c++  java
  • python专题高阶函数

    一 前言

    本篇内容是关于一些高阶函数基本使用的知识,其目的主要是简化代码,更加精炼;

    公众号:知识追寻者

    知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

    二 高阶函数

    2.1 高阶函数概念

    函数式编程为高阶函数(Higher-order function);函数式编程是指将一个函数作为另一个函数参数的编程方式;一般情况下使用函数式编程通常都会使用到匿名函数简化代码;

    2.2 高阶函数示例

    如下所示,定义过滤函数filter,如果函数值大于5就返回入参,否则返回None;

    将 filter 函数 作为 getNumber 函数的第一个入参,在函数体调用filter函数对第二个入参arrs进行值的过滤操作;

    最后对filter(num)进行判定,如果是None不入新的列表,否则加入列表;

    # -*- coding: utf-8 -*-
    
    # 对数组 arr 进行过滤
    def getNumber(filter,arrs):
        return [ filter(num) for num in arrs if filter(num) is not None]
    
    # 定义过滤函数
    def filter(num):
        if num > 5:
            return num
        else:
            pass
    
    result = getNumber(filter,list(range(0,10,2)))
    print(result)
    

    输出

    [6, 8]
    

    三 内置函数

    常用的内置高阶函数如下;

    3.1 map()

    map函数接受两个参数,一个是函数,一个是序列;map将传入的函数依次作用于序列中的每个元素,将结果作为新的列表返回;

    如下示例,传入匿名函数,其作用是对列表list中的每个值进行乘2,对新的值组成列表并返回;

    anno_map = map(lambda x: x * 2, list(range(0,10,2)))
    print(list(anno_map))
    

    输出

    [0, 4, 8, 12, 16]
    

    3.2 reduce()

    reduce():函数接收两个参数,一个是函数,另一个是序列;函数必须接收两个参数,reduce将序列的前一个参数和后一个参数进行累计计算的结果返回;

    如下示例 将 0,2,4,6,8 进行累加的结果进行返回;

    from functools import reduce
    
    anno_reduce = reduce(lambda x, y: x + y, range(0,10,2))
    # 20
    print(anno_reduce)
    

    3.3 filter()

    filter():筛选过滤函数;将传入的函数,依次作用于每个元素,如果函数返回值是True就保留否则丢弃;

    如下所示,对[0,10)的数字进行判定,如果能被2整除就保留,否则丢弃;

    anno_filter = filter(lambda x: x % 2 == 0,list(range(10)) )
    print(list(anno_filter))
    

    输出

    [0, 2, 4, 6, 8]
    

    3.4 sorted()

    sorted() 是排序函数 , 其参数如下

    • iterable 是一个序列
    • key 可计算的排序函数,用于自定义排序;
    • reverse 排序规则,reverse = False 升序(默认),reverse = True降序;

    如下示例,key的函数进对列表中的每个元素进行作用,对运算后的结果进行大小比较,默认是升序;

    anno_sorted = sorted([2,1,5,3,7], key=lambda x: x * x)
    print(anno_sorted)
    

    输出

    [1, 2, 3, 5, 7]
    
  • 相关阅读:
    职业生涯系列
    自我进修系列
    每周问题系列
    职业生涯系列
    软件测试专用名词
    Java系列 – 用Java8新特性进行Java开发太爽了(续)
    Java系列
    EJB系列
    EJB系列
    EJB系列
  • 原文地址:https://www.cnblogs.com/zszxz/p/12846071.html
Copyright © 2011-2022 走看看