Python进阶之函数式编程(把函数作为参数)
什么是函数式编程?
什么是函数式编程?
函数: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进阶之函数式编程(把函数作为参数)的更多相关文章
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- Python进阶之函数式编程
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- Python 进阶_函数式编程
目录 目录 函数式编程 Python 函数式编程的特点 高阶函数 匿名函数 lambda 函数式编程相关的内置函数 filter 序列对象过滤器 map reduce 折叠 自定义的排序函数 最后 函 ...
- Python基础:函数式编程
一.概述 Python是一门多范式的编程语言,它同时支持过程式.面向对象和函数式的编程范式.因此,在Python中提供了很多符合 函数式编程 风格的特性和工具. 以下是对 Python中的函数式编程 ...
- 可爱的 Python : Python中的函数式编程,第三部分
英文原文:Charming Python: Functional programming in Python, Part 3,翻译:开源中国 摘要: 作者David Mertz在其文章<可爱的 ...
- Python之面向对象函数式编程
Python之面向对象函数式编程 函数式编程的根本就是用 def 去模拟数学式的编程逻辑. 类似与 y = 2*x + 1 ,当x = 3 时,函数的结果y就得7. def test(x): retu ...
- Python Decorator 和函数式编程
看到一篇翻译不错的文章,原文链接: Python Decorator 和函数式编程
随机推荐
- android stuido 快捷键
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码 ...
- 必须知道的ADO.NET 数据库连接池
http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html 题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没 ...
- 使用Open Live Writer 的代码高亮插件体验
由于windows live writer 2012 已经停止服务,转而推出开源项目Open Live Writer .虽然Open Live Writer 也没怎么更新,官网更是一个插件都没有放出来 ...
- n条直线的最多交点
#include <iostream>using namespace std;int main(){int i,n;while(cin>>n){if(n==0||n==1) c ...
- fragment嵌套,viewpager嵌套 不能正确显示
转帖:http://blog.csdn.net/mybook1122/article/details/24003343 通常为 viewPager.setAdapter(new MyFragmentP ...
- 【Chromium中文文档】沙箱FAQ
沙箱FAQ 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox ...
- Cordova+Asp.net Mvc+GIS
Cordova+Asp.net Mvc+GIS跨平台移动应用开发实战1-系统初步搭建(附演示,apk,全部源码) 1.前言 身处在移动互联网的今天,移动应用开发炙手可热,身为程序猿的我们怎么能错过 ...
- python----面向对象:1类的定义
1.python中定义类的格式如下: class className(baseClassName): def functionName(argslist): 2.定义一个person类:它有一个Nam ...
- RMSE、RMS、标准差
1.均方根误差,它是观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替.方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方 ...
- android-Java SoftReference,WeakReference,Direct Reference简介
主要部分: SoftReference(软引用)是java中一个用来实现缓存内容的类.通过此类,可以观察某对象什么时候会被垃圾收集的执行绪清除.被 Soft Reference 指到的对象,即使没有任 ...