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
0 0