python的函数式编程玩法+年末小感
来源:互联网 发布:java正则验证端口号 编辑:程序博客网 时间:2024/05/22 06:55
从小老师教编程语言就告诉分两种:面向过程和面向对象,正如同小学电脑课面对的是win95,仿佛世界上windows就是操作系统的别名,如今还是这样,高校的计算机中心都是windows,所以linux是要自己搞起,函数式编程也是要自己搞起的~不为学分不为奖学金不为工资只是追随着自己的兴趣,这才是最开心的哈~
python有一大优点,就是既可以面向对象也可以面向过程还可以函数式搞起,因此想体验函数式编程的乐趣不用换erlangh或scheme。函数式编程的特点:
1. 变量不可变;
2. 闭包性;
按照函数式编程的特点,一个函数只接受输入并产生输出,不会改变外部变量的值也不会用到外部变量的值。也正因为这样,函数式编程一个函数只做一件事儿,方便模块化,而且代码量要少一些。
1.lambda
lambda是匿名函数,没有函数名,在闭包里和map reduce中很好用。下面是求两数乘积的函数:
>>>func=lambda x,y:x*y>>>func(3,4)12
2.map
map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:
>>> a=map(lambda x:x*2,[1,2,3])>>> list(a)[2, 4, 6]
3.reduce
reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:
>>> functools.reduce(lambda x,y:x*y,range(1,4))6
好了,这就是python函数式编程常用的几个函数,现在用一个求n的阶乘的例子对比一下函数式编程和面向过程的编程的区别:
>>> def func(n):... if n==1:... return 1... return n*func(n-1)... >>> func(4)24>>> g=lambda n:functools.reduce(lambda x,y:x*y,range(1,n+1))>>> g(4)24
非常简洁干净~然后再看一下函数式编程的闭包:
>>> def funA():... x=0... def funB():... nonlocal x... x+=1... print(x)... return funB... >>> a=funA()>>> a()1>>> a()2>>> a()3
闭包就是函数中又定义函数,里面的函数可以使用外部作用域内的变量,但不是全局变量,所以一次创建外部函数,则多次调用内部函数时外部作用域内的变量还是有效的;多次运行外部函数,则会重新创建闭包,原来外部变量的值也不会受到影响,如上例可以实现每次调用内部函数是的外部变量+1操作。这里说一下作用域的事儿,原来的python2只有全局作用域和局部作用域,python3新增的nonlocal作用域就是专门针对闭包的,nonlocal声明的变量只能访问外部作用域的变量,不能访问全局作用域的变量,这样就不用全局变量搞来搞去错都不知道哪里出的了。
这篇文章写完了,在2013的最后祝自己和大家新年愉快,为兴趣而活~哈哈
转载请注明:转自 http://blog.csdn.net/littlethunder/article/details/17652449
- python的函数式编程玩法+年末小感
- python的函数式编程玩法+年末小感
- Python, Lisp, Ruby函数式编程的一个小对比
- python函数式编程小学习记录
- 不同的角度,不同的玩法——用Python实现Fibonacci函数
- 年末小语
- Python中字符串的有趣玩法
- python threadpool多线程池的多种玩法
- Python -> 函数式编程的一些基本原则
- Python - 修饰器的函数式编程
- Python修饰器的函数式编程
- Python修饰器的函数式编程
- python 装饰器的函数式编程
- Python修饰器的函数式编程
- Python修饰器的函数式编程
- Python修饰器的函数式编程
- Python"函数式编程"的见证
- 12/19 python的函数式编程
- 动态规划经典五题
- ASP.NET跨页面传值技巧总结
- vb.net 操作Access数据库帮助类
- 字符串匹配算法——KMP && BF
- CSS之Position详解
- python的函数式编程玩法+年末小感
- 20个非常有用的Java程序片段
- shell 中变量的定义
- Android 4.2硬件加速可能导致Bitmap不能释放的问题
- linux下编译clang, libc++, libc++abi,以及第二遍自举编译
- 设计模式与框架的区别
- vi操作
- UBUNTU 卸载
- WPF Path实现虚线流动效果