Python高阶函数(Higher-order Function)

这篇具有很好参考价值的文章主要介绍了Python高阶函数(Higher-order Function)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python高阶函数(Higher-order Function)

abs()这个内置函数来得到一个数的绝对值

print(abs(-100)) #输出:100

我们把代码修改下,把abs赋值给一个变量:

f = abs
print(f(-100)) #输出:100

函数名其实就是指向函数的变量, abs(-100)是函数调用,而其名称abs是函数本身,我们可以将其赋值给变量,这样一来,变量可以指向(引用)函数,这时变量就获得了函数的功能,如上例中的 f ,直接调用f()和直接调用abs()完全相同。

既然变量可以指向函数,函数的参数能接收变量,那么,一个函数就可以接收另一个函数作为参数,这是高阶函数的一种情况。

什么是高阶函数?能接受函数名作为参数传入或把函数名做为结果值返回的函数,称为高阶函数。

具体说来,只要满足下面的任意一个条件就是高阶函数:

1、接受另外一个函数名作为参数传。

2、返回值(return)为另外一个函数名。

接受另外一个函数名作为参数传的情况,示例源码如下:

def fun():
    print("这是fun函数输出")
    
def high_fun(func):   #接受另外一个函数名作为参数传
    print("high_fun函数输出")
    # 在函数内部,通过传入的函数参数调用
    func()
    
high_fun(fun)

运行效果:

Python高阶函数(Higher-order Function)

下面再看一个例子

定义一个 myAdd 函数,它接受三个参数 x, y, f,其中 x, y 是数字,f 是一个函数。源码如下:

def myAdd(x, y, f):
  return f(x) + f(y)
 
result = myAdd(-12, -98, abs) #abs是内置的求绝对值的函数
print(result) #输出结果:110

运行效果:

Python高阶函数(Higher-order Function)

返回值(return)为另外一个函数名的情况,示例源码如下:

def fun():
    print("这是fun函数输出")
    
def high_fun(func):
    print("high_fun函数输出")
    return func  #返回值(return)为另外一个函数名
    
result = high_fun(fun)
result()

运行效果:

Python高阶函数(Higher-order Function)

需要留意一点,若要高阶函数的返回值为函数,则必须要把函数作为参数传入。

下面介绍几个python提供的常用高阶函数

如map()、filter()和reduce()函数等。

map()和filter()是内置函数【关于内置函数官方文档https://docs.python.org/zh-cn/3/library/functions.html】
reduce()不是一个内置函数,在functools模块【关于functools 模块官方文档https://docs.python.org/zh-cn/3/library/functools.html 】中。需要先import,如:
from functools import reduce

map函数

基本语法是map(function, iterable, ...)

接收的参数,第一个是函数名,后面的是可迭代(iterable)对象,其功能是将迭代对象中的每一个项(元素)作为函数的参数依次传入到函数值中执行加工。当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。返回值是一个迭代器(Iterator)对象。

例1、源码如下:

def f(x):
    return x**2   #返回一个数的2次方

r = map(f, [1, 2, 3, 4, 5])
print(list(r)) #输出:[1, 4, 9, 16, 25]

运行效果:

Python高阶函数(Higher-order Function)

例子中,用map函数,可以让列表中的每一个数都完成一次对函数参数的调用,并将结果返回到一个可迭代对象中。

通过 list(map()) 将map函数返回的迭代对象转化为列表。

例2、Map可以和lambda函数联合使用:

calc = lambda x: x**2
r1= map(calc, [1, 2, 3, 4, 5])
print(list(r1)) #输出:[1, 4, 9, 16, 25]
#上面的代码和下面的代码等效
r2= map(lambda x: x**2, [1, 2, 3, 4, 5])
print(list(r2)) #输出:[1, 4, 9, 16, 25]

运行效果:

Python高阶函数(Higher-order Function)

例3、当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束:

print(list(map(lambda x, y : x + y, [1, 2, 3], [1, 2, 3, 4]))) #输出:[2, 4, 6]
print(list(map(lambda x, y : x + y, [1, 2, 3, 4], [1, 2, 3]))) #输出:[2, 4, 6]

filter()函数

基本语法如下:

filter(function, iterable) 

前者为函数,后者为可迭代(iterable)对象

filter函数其主要功能是过滤,如果是一个函数的话,则将第二个可迭代对象里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。其返回值构成迭代器(iterator)对象。

例1、源码如下:

def is_odd(n):
    return n % 2 == 1

res = filter(is_odd, range(10))
print(list(res)) #输出:[1, 3, 5, 7, 9]

例2、将上例改用lambda函数:

res = filter(lambda x : x % 2, range(10))
print(list(res)) #输出:[1, 3, 5, 7, 9]

例3、第一个参数为None的情况:

temp = filter(None, [1, 0, False, True])
print(list(temp)) #输出:[1, True]

reduce函数

基本语法如下:

reduce(function, sequence [,initializer] )

说明:function有两个参数,reduce依次从iterable中取一个元素,和上一次调用function的结果做参数,再次调用function。

若提供initializer参数,会以iterable中的第一个元素和initializer作为参数调用function。

其返回值为单一的值。

示例源码如下:

from functools import reduce
calc = lambda x, y: x+y
res1 = reduce(calc, [1, 2, 3, 4]) #计算 (((1+2)+3)+4)的值
print(res1) 
res2 = reduce(calc, [1, 2, 3, 4],100) #计算 ((((100+1=)+2)+3)+4) 的值
print(res2)

运行效果:

Python高阶函数(Higher-order Function)

 文章来源地址https://www.toymoban.com/news/detail-402436.html

到了这里,关于Python高阶函数(Higher-order Function)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python内置的20个高阶函数的功能和示例详解

    📚 个人网站:ipengtao.com Python是一门功能丰富的编程语言,提供了许多内置函数来处理各种数据操作。其中,高阶函数是一类特殊的函数,它们接受其他函数作为参数,或者返回函数作为结果。高阶函数是函数式编程的核心概念之一,可以大大提高代码的可读性和灵活性。本

    2024年01月22日
    浏览(52)
  • 损失函数(Loss Function)一文详解-分类问题常见损失函数Python代码实现+计算原理解析

    目录 前言 一、损失函数概述 二、损失函数分类 1.分类问题的损失函数

    2023年04月26日
    浏览(30)
  • 【python基础语法六】迭代器,生成器,推导式和高阶函数

    内置函数: dir 获取当前对象的内置成员 高阶函数 : 能够把函数当成参数传递的就是高阶函数 (map ,filter ,reduce , sorted) 案例: 1. enumerate 2. zip 元组推导式是生成器( generator ) (1) 基本语法 (2) 优化生成器代码 (3) send 的使用方式 (给上一个 yield 发送数据) (4) yield from 的使用 (5) 案例

    2024年02月02日
    浏览(38)
  • 【人工智能】LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数

    LLM 大模型的本质:一个超高阶函数(函数式编程思想,高阶函数),大模型的本质是有巨大数量的函数复合组成的超高阶函数。 —— 禅与计算机程序设计艺术

    2024年02月09日
    浏览(46)
  • 高阶函数和函数柯里化

            高阶函数是指可以接受一个或多个函数作为参数,并且/或者返回一个新函数的函数。换句话说,它可以操作其他函数,使得代码更加抽象和灵活。高阶函数的存在使得函数可以作为一等公民在代码中传递和使用。         如下的函数就是一个高阶函数,他可以传

    2024年02月13日
    浏览(39)
  • Hive:聚合函数、GROUP BY、ORDER BY、LIMIT、执行顺序和JOIN、函数

    1.聚合函数 常见的聚合函数: Count、Sum、Max、Min和Avg 特点:不管原始数据多少条,聚合之后只有一条 Count(column)返回某列的行数,不包括NULL值 2.GROUP BY select中的字段要么是GROUP BY字段,要么是被聚合函数应用的字段 2.HAVING WHERE中无法出现聚合函数,所以有了HAVING WHERE是分组前

    2024年02月07日
    浏览(35)
  • Kotlin学习 - 高阶函数和内联函数

    高阶函数定义 如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。 以前开发的时候,入参或返回值都是基本类型或者对象,但是在Kotlin中出现了一个新的类型:函数类型。就是函数也可以像 String 这种类型一样做入参或者返

    2024年02月12日
    浏览(51)
  • 【JavaScript】深度理解js的函数(function、Function)

    学了这么久的JavaScript,函数在JavaScript中最常用之一,如果你不会函数,你就不会JavaScript。 函数就是Function对象,一个函数是可以通过外部代码调用的一个“子程序”,它是头等(first-class)对象,因为它们可以像任何其他对象一样具有属性和方法 。瞧瞧它的定义,注定它能

    2024年01月21日
    浏览(34)
  • kotlin高阶函数

    函数式API:一个函数的入参数为Lambda表达式的函数就是函数式api 例子: 上面这段函数: 首先这个函数是一个泛型函数 泛型函数的定义:就是我们在写完一个函数后,只知道一个总的类型,而这个总的类型下有很多继承了这个总类型的类,在返回时我们不知道这个函数具体返回哪个子

    2024年02月15日
    浏览(44)
  • Kotlin 高阶函数详解

    在 Kotlin 中,函数是一等公民,高阶函数是 Kotlin 的一大难点,如果高阶函数不懂的话,那么要学习 Kotlin 中的协程、阅读 Kotlin 的源码是非常难的,因为源码中有太多高阶函数了。 高阶函数的定义非常简单: 一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包