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计算对角线有理函数插值的方法
本文实例讲述了python计算对角线有理函数插值的方法.分享给大家供大家参考.具体实现方法如下: ''' p = rational(xData,yData,x) Evaluates the diagonal rational function interpolant p(x) that passes through he data points ''' from numpy import zeros def rational(xData,yData,x): m = len(xData) r =
-
详细介绍Python中的偏函数
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: >>> int('12345') 12345 但int()函数还提供额外的base参数,默认值为10.如果传入base参数
-
Python中自定义函数的教程
在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数为例: def my_abs(x): if x >= 0: return x else: return -x 请自行测试并调用my_abs看看返回结果是否正确. 请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回.因此,函数内部通过条件判断和循环可以实现非常复杂
-
python中随机函数random用法实例
本文实例讲述了python中随机函数random用法.分享给大家供大家参考.具体如下: python中的random模块功能非常强大,可以生成各种随机值 #! python # random import random print random.choice(['apple', 'pear', 'banana']) #从数组中随机选择一个元素 print random.sample(xrange(100), 10) # sampling without replacement print ran
-
Python中统计函数运行耗时的方法
本文实例讲述了Python中统计函数运行耗时的方法.分享给大家供大家参考.具体实现方法如下: import time def time_me(fn): def _wrapper(*args, **kwargs): start = time.clock() fn(*args, **kwargs) print "%s cost %s second"%(fn.__name__, time.clock() - start) return _wrapper #这个装饰器可以在方便地统计函数运行的
-
理解Python中函数的参数
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 默认参数 我们仍以具体的例子来说明如何定义函数的默认参数.先写一个计算x2的函数: def power(x
-
Python查找函数f(x)=0根的解决方法
本文实例讲述了Python查找函数f(x)=0根的解决方法.分享给大家供大家参考.具体实现方法如下: ''' root = ridder(f,a,b,tol=1.0e-9). Finds a root of f(x) = 0 with Ridder's method. The root must be bracketed in (a,b). ''' import error from math import sqrt def ridder(f,a,b,tol=1.0e-9): fa = f(a)
-
Python的函数的一些高阶特性
高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码: >>> abs(-10) 10 但是,如果只写abs呢? >>> abs <built-in function abs> 可见,abs(-10)是函数调用,而abs是函数本身. 要获得函数调用结果,我们可以把结果赋值给变量: >>> x
-
简析Python函数式编程字符串和元组及函数分类与高阶函数
目录 函数式编程中的字符串 不变类型元组 普通元组的声明与访问 函数式的分类 any() .all() .len().sum() 对比学习 zip().reversed().enumerate() 高阶函数 函数 max 和 min() map 函数 filter 函数 sorted 函数 同一需求的不同效率问题 函数式编程中的字符串 在函数式编程中,经常用到 Python 字符串,因其是不可变数据结构. 字符串本身是一个对象,具备很多对象方法,与常识中函数的使用不太相同,例如下述代码 my_s
-
详解python内置常用高阶函数(列出了5个常用的)
高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做高阶函数. python内置常用高阶函数: 一.函数式编程 •函数本身可以赋值给变量,赋值后变量为函数: •允许将函数本身作为参数传入另一个函数: •允许返回一个函数. 1.map()函数 是 Python 内置的高阶函数,它接收一个函数 f 和一个 list, 并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回 def add(x): ret
-
详解Python高阶函数
本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,我们来看几个小例子.我们都知道在 python 中一切皆对象,函数也不例外.比如求绝对值函数 abs,我们可以用一个变量 f 指向 abs 函数,那么当调用 f() 的时候可以得到和 abs() 一样的效果,这说明变量可以指向函数! 同理我们将 abs 指向另一个函数 abs = len,那么 abs 将不再是求绝对值的函数了,abs指向的是求长度的 len 函数.这说明函数名其实就
-
Python编程functools模块中创建修改函数的高阶函数解析
partial 函数 partial 为偏函数(有的地方也叫做部分应用函数),它是对函数的二次封装,将现有函数的部分参数提前绑定为指定值,然后再进行计算. 由于偏函数的可变参数少,因此函数调用的难度低. 直接展示代码: from functools import partial # 原函数声明 def show(name, level): print("name:", name, "level:", level) # 定义偏函数,封装 show() 函数,并为 na
-
Python常见内置高阶函数即高阶函数用法
目录 1.什么是高阶函数? 2.高阶函数-map.filter.reduce 2.1map函数 2.2filter函数 2.3reduce函数 1.什么是高阶函数? 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数. 参数为函数: #参数为函数 def bar(): print("in the bar..") def foo(func): func() print("in the foo
-
Python技巧匿名函数、回调函数和高阶函数
目录 1.定义匿名或内联函数 2.在匿名函数中绑定变量的值 3.让带有n个参数的可调用对象以较少的参数调用 4.在回调函数中携带额外的状态 1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数. 如下图所示: add = lambda x, y: x + y print(add(2, 3)) # 5 print(add("hello", &
-
Python编程functools模块创建修改的高阶函数解析
目录 partial 函数 装饰器 @lru_cache reduce 函数 partial 函数 partial 为偏函数(有的地方也叫做部分应用函数),它是对函数的二次封装,将现有函数的部分参数提前绑定为指定值,然后再进行计算. 由于偏函数的可变参数少,因此函数调用的难度低. 直接展示代码: from functools import partial # 原函数声明 def show(name, level): print("name:", name, "level:&q
-
python高阶函数使用教程示例
目录 一.高阶函数 函数定义 函数名可作为返回值.也可作为参数 (1)函数名作为参数 (2)函数名作为返回值 二.常用的高阶函数 (1)map(function,iterable) (2)filter(function, iterable) (3)reduce(function, iterable) 一.高阶函数 函数定义 python中,函数名是变量,下方这个method函数名看成变量,指向一个计算的函数!因此函数名其实就是指向函数的变量,故变量可指向函数: 变量可指向函数,且函数的变量可接受
-
深入了解python高阶函数编写与使用
目录 1.变量可以指向函数 2.函数名也可以是变量. 3.传入函数 总结 何为高阶函数,以实际代码为例子一步步深入概念. 1.变量可以指向函数 以abs()为例: >>>abs(-10) 10 但是只写abs呢? >>>abs <built-in function abs> abs(-10)是调用函数而abs是函数本身 . 把函数本身赋给变量呢? >>>f=abs >>>f <built-in function ab
随机推荐
- win2003 使用DNS服务器实现负载均衡
- Ajax实现动态加载组合框的实例代码
- Flex Label自动截取、自动换行代码
- vbs后台运行bat删除自身的代码
- MySQL+SSM+Ajax上传图片问题
- java中HashMap的原理分析
- php-perl哈希算法实现(times33哈希算法)
- 解析ABP框架中的数据传输对象与应用服务
- ASP.NET 2.0/3.5中直接操作Gridview控件插入新记录
- 使用Modello编写JavaScript类
- asp.net Grid 导出Excel实现程序代码
- php实现只保留mysql中最新1000条记录
- Android仿微信朋友圈全文、收起功能的实例代码
- PHP截取IE浏览器并缩小原图的方法
- Shell脚本之无限循环的两种方法
- java生成字母数字组合的随机数示例 java生成随机数
- 自定义事件解决重复请求BUG的问题
- c#实现的操作oracle通用类
- Java 驼峰命名法详解(必看篇)
- 输出1000以内的素数的算法(实例代码)