函数式编程——函数笔记
来源:互联网 发布:ghost网络克隆软件 编辑:程序博客网 时间:2024/06/07 07:57
Python函数式编程(函数)
2.2、从函数开始:
定义一个函数:
def add(x, y):
return x+y
使用lambda可以定义简单单行匿名函数:lambda的语法是:lambda args:expression
参数与普通函数一样,表达式的值就是匿名函数返回的值
lambda_add = lambda x,y:x+y
使用lambda的目的是编写简单的,偶尔的,可预见不会被修改的函数。
2.2、使用函数赋值
add_a_function_to_anther = add
print add_a_function_to_another(1, 2) //3
既然函数可以被变量引用,那么将函数作为参数和返回值就是很寻常的做法。
2.3、闭包
闭包是一类特殊的函数:如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么函数就是一个闭包。e.g.:
def f():
n = 1
def inf():
print n
inf()
n = 'x'
inf()
类似于普通模块函数和模块中定义全局变量的关系:修改外部变量能影响内部作用域中的值,而在内部作用域中定义同名变量则将屏蔽(隐藏)外部变量。
需要在函数中修改全局变量,使用关键字global。Python2中没有支持闭包中修改参数,Python3中关键字nonlocal可以修改。
2.4、作为参数
与将函数当做参数传递大体一样。
定义一个函数:
def reduce(function, lst, initial):
result = initial
for num in lst:
result = function(result, num)
result result
print reduce(add, lst, 0) //计算加法
print reduce(lambda x,y:x*y, lst, 1) //计算乘法
2.5、作为返回值
函数作为返回值通常与闭包一起使用。
def map(function, lst):
result = []
for item in lst:
result.append(function(item))
result result
使用map为lst中的每个元素加1:
lst = map(lambda x:add(1,x), lst)
print reduce(lambda x,y:x*y, lst, 1)
根据指定的做操作数,能生成一个加法函数,用起来像这样:
lst = map(add_to(10), lst) #add_to(10)返回一个函数,这个函数接受一个参数并加上10后返回
下面是add_to函数:
def add_to(n):
return lambda x:add(n,x)
通过已经存在的某个函数指定数个参数,生成一个新的函数,这个函数只需要传入剩余未指定的参数就能实现原函数的全部功能,这被称为偏函数。Python内置的functools模块提供了一个函数partial,可以为任意函数生成偏函数:
functools.partial(func[, *args][, **keywords])
需要指定生成偏函数的函数,指定数个参数或者命名,然后partial将返回一个像函数一样可调用的对象(偏函数)。
另一个特殊的例子谁装饰器,装饰器用于增强甚至改变原函数的功能。
原文出处:http://www.cnblogs.com/huxi/archive/2011/06/18/2084316.html
- 函数式编程——函数笔记
- 函数式编程笔记
- 函数和函数式编程学习笔记
- Chapter11"函数和函数式编程"笔记
- Python学习笔记——函数式编程
- 廖雪峰python学习笔记——函数式编程
- Python函数式编程——学习笔记
- Programming Clojure笔记之四——函数式编程
- Python学习笔记——函数式编程
- 【Python】学习笔记——-5.0、函数式编程
- Python学习笔记(五)——函数式编程
- 函数式编程——Python学习笔记05
- Python笔记(二)——高级特性|函数式编程
- 函数式编程笔记(一)——粮草先行
- python精简笔记(五)——函数式编程
- 函数式编程笔记(三)——java8实践
- 58.笔记go语言——函数式编程
- Python学习笔记——函数式编程
- C/C++中static关键字总结
- [黑科技]DNS隧道-绕过wifi热点登陆免费上网
- 类和对象浅谈(3)
- IPython :一个交互式计算和开发环境
- 项目26.4个人所得税计算器switch语句
- 函数式编程——函数笔记
- leetcode笔记:Path Sum II
- Product of Array Except Self
- USACO 2.3.3 Zero Sum
- word里创建自己的行文格式
- Eclipse 中设置JVM 内存
- 【2015/10/2】Linux学习日志_Day4 改变用户权限 文件类型与权限 链接 服务
- opencv多线程读取视频的问题
- ARC指南1 - strong和weak指针