函数式编程

最近对Python的学习有些怠慢,最近的学习态度和学习效率确实很不好,目前这种病况正在好转。

今天,我把之前学过的Python中函数式编程简单总结一下,分享给大家,也欢迎并感谢大家提出意见。

首先,我们学习函数式编程时,需要知道一个概念:高阶函数。那么到底什么是高阶函数呢?把函数作为参数传入,这样的函数就称为高阶函数。而函数式编程就是指这种高度抽象的编程范式。

正文

接下来,我简单介绍以下四种函数的用法:map/reduce   filter   sorted   lambda

在这里,map/reduce并不是分布式系统中的map/reduce,而是Python中内建的map()函数和reduce()函数。

map:我们在使用map函数时候,map函数需要接收两个参数,第一个参数是函数,第二个参数是序列,那么表示的含义就是map将传入的函数依次作用在序列中的每一个元素,并把结果以列表的形式返回。

 def f(x):
return x*x print map(f,[1,2,3,4,5,6,7,8,9,10])

结果可想而知了:

看到这里,你会不会有不屑意味,我干嘛非得用map函数啊,直接写一个函数,然后调用即可了啊。不错,这样写肯定没错滴,但是会不会有些麻烦呀。看下面的代码

 def fuc(x):
return x*x L = []
for num in [1,2,3,4,5,6,7,8,9,10]:
L.append(fuc(num))
print L

reduce:reduce函数和map函数有什么不同之处呢?reduce函数也需要两个参数:函数和序列。reduce参数中的函数必须接收两个参数,那么reduce函数表示的含义则为把返回的结果继续和序列的下一个元素做累积计算,典型例子比如对序列求和。

 def f2(x,y):
return x+y print reduce(f2,[1,2,3,4,5,6,7,8,9,10])

想到reduce的定义,我们还可以用reduce来解决一个蛋疼无比的问题,那就是把序列变为整数,比如[1,2,3,4,5]变为12345。

 def fn(x,y):
return x*10+y print reduce(fn,[1,2,3,4,5,6,7,8])

filter:filter函数用于过滤序列中某些元素。和map、reduce函数一样,filter也接收一个函数和一个序列,不同的是,filter把传入的函数参数作用于序列中每一个元素,然后根据返回值判断是true还是false来决定该元素是否被丢弃。

 def isEven(x):
return x%2==0 print filter(isEven,[1,2,3,4,5,6,7,8,9,10])

sorted:sorted函数用于对序列排序,这个函数之前的Python总结里多次提到,这里我简单说一下通常的规定吧:对于两个元素x和y,如果x<y,返回-1,如果x>y ,返回1,如果x==y,返回0。这样默认的规定下,我们排序的结果是从小到大排序的,所以如果想得到从大到小的结果,我们需要重写sorted函数的规定,这个和C++是一样的道理吧,就不贴代码了,自己边撸边悟吧。

lambda:便利强大的lambda函数又称为匿名函数,它不需要显式的定义函数,但是匿名函数也有一些限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

 print map(lambda x : x*x , [1,2,3,4,5,6,7,8,9,10])
ff = lambda x : x*x*x
print ff(5)

匿名函数也是有很多优点的,要不然怎么会使用它呢。第一,函数没有名字,不必担心有函数名冲突;第二,匿名函数是一个函数对象,也可以把匿名函数赋值给一个变量,然后利用变量来调用函数。

Python学习总结之五 -- 入门函数式编程的更多相关文章

  1. python学习第十一天 -- 函数式编程

    在介绍函数式编程之前,先介绍几个概念性的东西. 什么是函数式编程? 函数式编程的特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,没有副作用,测试简单; 3.支持高阶函数,代码简洁. ...

  2. Python学习笔记二:函数式编程

    1:Python中,内置函数名相当于一个变量,指向内置函数.所以可以通过函数名调用相应函数,也可以给函数名赋值,改变它的内容,如:可以把另一个函数变量赋值给它,那它就指向了所赋值的函数了. 2:高级函 ...

  3. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  4. Python学习一(面向对象和函数式编程)

    学习了一周的Python,虽然一本书还没看完但是也收获颇多,作为一个老码农竟然想起了曾经荒废好久的园子,写点东西当做是学习笔记吧 对Python的语法看的七七八八了,比较让我关注的还是他编程的思想,那 ...

  5. Python学习札记(二十三) 函数式编程4 sorted

    参考:sorted NOTE 1.sorted,快速排序,时间复杂度O(nlogn)渐进最优. #!/usr/bin/env python3 L = [] for i in range(10): L. ...

  6. Python学习札记(二十一) 函数式编程2 map/reduce

    参考:map/reduce Note 1.map():map()函数接收两个参数,一个是函数,一个是Iterable.map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. ...

  7. Python学习札记(二十七) 函数式编程8 偏函数

    偏函数 NOTE 1.int()函数提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: #!/usr/bin/env python3 import functools ...

  8. python学习,day3:函数式编程,递归和高阶函数

    # coding=utf-8 # Author: RyAn Bi def calc(n): #递归 print(n) if int(n/2) > 0: #设置条件,否则会循环999 次,报错, ...

  9. python学习,day3:函数式编程,局部变量和全局变量

    # coding=utf-8 # Author: RyAn Bi school = 'THU' #全局变量 def change_name(name): global age #在函数中,用globa ...

随机推荐

  1. 初始化home目录

    mkdir WORKM 公共资料 科学研究 临时文档 项目开发 正在学习 专职教学 自作文档

  2. 修改手機的 input source 及 charger 及 usb 相關電路後,容易忽略的事項

    input source 及 charger 需要注意, 是否可以在關機的狀況下充電, 當然 開機充電 是一定要的. usb 部分需要注意, 是否可以在沒有電或者是有電的狀況下 download 程式 ...

  3. kafka术语

    kafka 架构Terminology(术语) broker(代理) Kafka集群包含一个或多个服务器,这种服务器被称为broker Topic  每条发布到Kafka集群的消息都有一个类别,这个类 ...

  4. Codeforces 899 A.Splitting in Teams

      A. Splitting in Teams   time limit per test 1 second memory limit per test 256 megabytes input sta ...

  5. NWU现场赛——解题报告

    负二进制转换 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Desc ...

  6. python 设计模式之MVC模式

    一.简单介绍 mvc模式  the  model-view-controller pattern mvc模式是一个运用在软件工程中的设计模式.mvc模式脱离了以前简单的web服务设计逻辑,将开发,测试 ...

  7. noip2017集训测试赛(六)Problem A: 炮艇大赛之正式赛

    题目描述 给定一个长度为\(L \le 10^9\)的环形赛道, \(n \le 10^5\)个人在上面赛艇. 每个人的速度都不相同, 假如为正则顺时针走, 否则逆时针走. 当两个人相遇时, 他们就会 ...

  8. Java使用HttpURLConnection调用WebService(原始方法)

    说明:使用Java原生的HttpURLConnection调用WebService可以免去引入SOA的框架,比如一些CXF框架等.可以使代码足够精简,比如对于一些只调用一两个接口的,这种方式是最适合的 ...

  9. Linux内核Crash分析

    转载自:http://linux.cn/article-3475-1.html 在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为 ...

  10. ios编程规范

    允许使用较长的描述尽量不要使用缩写,而是将完整的意思写出来.源于代码的维护可能会被不同文化背景的programmer阅读 适当的命名前缀,比如给变量,协议等,不要给方法加前缀 方法命名规则一般以小写字 ...