Python的函数的一些高阶特性

 更新时间:2015年04月27日 11:14:27   作者:廖雪峰  
这篇文章主要介绍了Python的函数的一些高阶特性,包括函数名用作变量等一些小技巧,需要的朋友可以参考下

高阶函数英文叫Higher-order function。什么是高阶函数?我们以实际代码为例子,一步一步深入概念。
变量可以指向函数

以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码:

>>> abs(-10)
10

但是,如果只写abs呢?

>>> abs
<built-in function abs>

可见,abs(-10)是函数调用,而abs是函数本身。

要获得函数调用结果,我们可以把结果赋值给变量:

>>> x = abs(-10)
>>> x
10

但是,如果把函数本身赋值给变量呢?

>>> f = abs
>>> f
<built-in function abs>

结论:函数本身也可以赋值给变量,即:变量可以指向函数。

如果一个变量指向了一个函数,那么,可否通过该变量来调用这个函数?用代码验证一下:

>>> f = abs
>>> f(-10)
10

成功!说明变量f现在已经指向了abs函数本身。
函数名也是变量

那么函数名是什么呢?函数名其实就是指向函数的变量!对于abs()这个函数,完全可以把函数名abs看成变量,它指向一个可以计算绝对值的函数!

如果把abs指向其他对象,会有什么情况发生?

>>> abs = 10
>>> abs(-10)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

把abs指向10后,就无法通过abs(-10)调用该函数了!因为abs这个变量已经不指向求绝对值函数了!

当然实际代码绝对不能这么写,这里是为了说明函数名也是变量。要恢复abs函数,请重启Python交互环境。

注:由于abs函数实际上是定义在__builtin__模块中的,所以要让修改abs变量的指向在其它模块也生效,要用__builtin__.abs = 10。
传入函数

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

一个最简单的高阶函数:

def add(x, y, f):
  return f(x) + f(y)

当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs,根据函数定义,我们可以推导计算过程为:

x ==> -5
y ==> 6
f ==> abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 11

用代码验证一下:

>>> add(-5, 6, abs)
11

编写高阶函数,就是让函数的参数能够接收别的函数。
小结

把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

相关文章

  • Python中的并发编程asyncio库入门使用

    Python中的并发编程asyncio库入门使用

    这篇文章主要为大家介绍了Python中的并发编程asyncio库入门的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Python中join和split用法实例

    Python中join和split用法实例

    这篇文章主要介绍了Python中join和split用法实例,本文直接给出使用实例,需要的朋友可以参考下
    2015-04-04
  • Python个人博客程序开发实例用户验证功能

    Python个人博客程序开发实例用户验证功能

    这篇文章主要介绍了怎样用Python来实现一个完整的个人博客系统,我们通过实操上手的方式可以高效的巩固所学的基础知识,感兴趣的朋友一起来看看吧
    2022-12-12
  • python机器学习理论与实战(一)K近邻法

    python机器学习理论与实战(一)K近邻法

    这篇文章主要为大家详细介绍了python机器学习理论与实战第一篇,K近邻法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Django创建一个后台的基本步骤记录

    Django创建一个后台的基本步骤记录

    这篇文章主要给大家介绍了关于Django创建一个后台的基本步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Python ADF 单位根检验 如何查看结果的实现

    Python ADF 单位根检验 如何查看结果的实现

    这篇文章主要介绍了Python ADF 单位根检验 如何查看结果的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python外星人入侵游戏编程完整版

    Python外星人入侵游戏编程完整版

    这篇文章主要为大家详细介绍了Python外星人入侵游戏编程完整的实现思路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 对python 操作solr索引数据的实例详解

    对python 操作solr索引数据的实例详解

    今天小编就为大家分享一篇对python 操作solr索引数据的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python下的Mysql模块MySQLdb安装详解

    Python下的Mysql模块MySQLdb安装详解

    在Python环境下,如果想操作MySQL数据库,难免会调用相应的包,比如常用的:MySQLdb通过导入:import MySQLdb 后,可直接调用里面的方法
    2014-04-04
  • 使用pytorch实现线性回归

    使用pytorch实现线性回归

    这篇文章主要为大家详细介绍了使用pytorch实现线性回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04

最新评论