• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python的函数的一些高阶特性

Python的函数的一些高阶特性

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python特性,python3.6新特性,python动态语言特性,python语言特性,python3新特性等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

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

>>> abs(-10)
10

</div>

但是,如果只写abs呢?

>>> abs
<built-in function abs>

</div>

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

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

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

</div>

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

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

</div>

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

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

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

</div>

成功!说明变量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

</div>

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

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

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

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

一个最简单的高阶函数:

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

</div>

当我们调用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

</div>

用代码验证一下:

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

</div>

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

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

</div>

您可能想查找下面的文章:

  • Python的函数的一些高阶特性
  • Python的函数的一些高阶特性

相关文章

  • Python中__name__的使用实例
  • Python异常处理总结
  • Flask框架的学习指南之制作简单blog系统
  • Python多线程编程(四):使用Lock互斥锁
  • python中快速进行多个字符替换的方法小结
  • Python利用Beautiful Soup模块创建对象详解
  • json跨域调用python的方法详解
  • Python实现FLV视频拼接功能
  • Python中函数的参数传递与可变长参数介绍
  • python中的五种异常处理机制介绍

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python写的Socks5协议代理服务器
    • python将文本转换成图片输出的方法
    • Python中对象迭代与反迭代的技巧总结
    • 栈和队列数据结构的基本概念及其相关的Python实现
    • Python判断变量是否已经定义的方法
    • 跟老齐学Python之编写类之二方法
    • 详解Python的Django框架中的templates设置
    • Eclipse中Python开发环境搭建简单教程
    • 在ironpython中利用装饰器执行SQL操作的例子
    • Python中字符串的修改及传参详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有