码迷,mamicode.com
首页 > 编程语言 > 详细

Python进阶之函数式编程(把函数作为参数)

时间:2015-12-09 00:10:06      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

什么是函数式编程?

什么是函数式编程?

函数:function
函数式:functional,一种编程范式

函数式编程是一种抽象计算的编程模式
函数≠函数式,比如:计算≠计算机

在计算机当中,计算机硬件是最底层的,而越往上语言越高级

--------------------------------->
计算机硬件-->汇编语言-->c语言-->Python语言

指令 函数 函数式
计算机------------------------>计算(数学)

函数式编程的特点

  • 把计算视为函数而非指令
  • 纯函数式编程:不需要变量,没有副作用,测试简单
  • 支持高阶函数,代码简洁

Python支持的函数式编程有以下特点:

  • 不是纯函数式编程:允许有变量
  • 支持高阶函数:函数也可以作为变量传入
  • 支持闭包:有了闭包就能返回函数
  • 有限度地支持匿名函数

把函数作为参数

什么是高阶函数?

  • 变量可以指向函数
    例如,python中有个函数叫abs(求绝对值)
>>> abs(-10)
10
>>> abs
<built-in function abs>
>>> f=abs
>>> f(-20)
20
  • 函数名其实就是指向函数的变量
    同样是abs函数
>>> abs
<built-in function abs>
>>> abs=len
>>> abs(-10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type ‘int‘ has no len()
>>> abs([1,2,3])
3

如果我们把abs这个变量指向函数另一个函数,那么abs就不再是求绝对值的函数,这个时候就会报错。这个时候abs指向的是len函数。这个时候我们给abs传入一个list,就可以正常调用了。函数名与普通变量没有什么区别,它指向的是一个函数名。

  • 高阶函数:能接收函数做参数的函数
    • 变量可以指向函数
    • 函数的参数可以接收变量
    • 一个函数可以接收另一个函数作为参数
    • 能接收函数作参数的函数就是高阶函数

例:接收abs函数

  • 定义一个函数,接收x,y,f三个参数
  • 其中x,y是数值,f是函数
>>>def add(x,y,f):
... return f(x)+f(y)
...
>>> add(-5,9,abs)
14

上面的代码,根据函数的定义,函数执行的代码实际上是:

abs(-5)+abs(9)

由于参数x,y和f都可以任意传入,如果f传入其他函数就可以得到不同的返回值

再例如:计算技术分享
(计算平方根可以用函数:math.sqrt())

import math

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

print add(25,9,math.sqrt)

Python进阶之函数式编程(把函数作为参数)

标签:

原文地址:http://www.cnblogs.com/XBlack/p/5031206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!