python2.7学习笔记(7) ——函数式编程
来源:互联网 发布:ipmsg mac 编辑:程序博客网 时间:2024/06/03 19:53
函数式编程是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
高阶函数
变量可以指向函数
函数名也是变量
传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
map/reduce
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
练习:
1、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。
2、Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积。
返回函数
可以将函数作为返回值返回
在A函数中定义B函数,并且A函数返回B函数,这是如果调用B函数,则A中的参数和局部变量会储存在B中,B可以使用这些参数和局部变量。这种结构叫闭包
每次调用A都会返回一个B,但是没次的B都是不等的,即使A的参数和其中的局部变量完全一样
返回的函数并不会马上执行,而是等到调用的时候才会执行
返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
匿名函数
lambda关键字来表示匿名函数 lambda x: x * x
实际上就是:
def f(x): return x * x
匿名函数只能有一个表达式
Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。
装饰器
偏函数
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数
(需要import functools),这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
>>> import functools>>> int2 = functools.partial(int, base=2)>>> int2('1000000')64>>> int2('1010101')85
- python2.7学习笔记(7) ——函数式编程
- python2.7学习笔记(5) ——函数
- 【Python2.7 学习笔记】函数(一)
- 【Python2.7 学习笔记】函数(二)
- python2.7学习笔记(9) ——面向对象编程
- python2.7学习笔记(10) ——面向对象高级编程
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- Python2.7学习笔记1 输入输出函数
- python2.7学习笔记(-)
- Python2.7 学习笔记 (一)——基础知识
- python2.7学习笔记(8) ——模块
- Python2.7注意点汇总(函数式编程)
- Python2.7学习笔记(一)
- Python2.7学习笔记(二)
- [廖雪峰 - Python2.7教程] 返回函数 - 学习笔记
- [廖雪峰 - Python2.7教程] 返回函数2 - 学习笔记
- python2.7 学习笔记 (四)——异常
- Python2.7 学习笔记 (三)—— 类,继承,重载
- 对你的 REST API 进行保护的正确办法
- DataTable 转化为List
- 图表轴刻度的思路,算法: 转载1【最简易的坐标刻度校正算法】
- BestCoder Round #50 (div.2)
- 关于ARM中判断某个引脚是输出还是输入
- python2.7学习笔记(7) ——函数式编程
- Collections和Arrays工具类
- linux进程间通信
- Java笔试面试题009
- HDU 2196 --Computer 【树的直径 && 每个点的最长路 && 经典】
- 使用 gtest 给 DLL 工程编写单元测试
- hdu 1869 六度分离
- 黑马程序员-[OC语言] 第四篇:ARC机制、类别 概述
- HDU 2491 Priest John's Busiest Day(贪心)