函数式编程

最近对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. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---56

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  2. 设置div自适应高度滚动

    <body> <div id="divc" style="overflow: auto;"> </div> <a id ...

  3. linux私房菜-读书笔记

    第零章:计算机概论 计算机:接受用户输入指令和数据,经过中央处理器的数据和逻辑单元运算处理器处理后,以产生或存储成有用的信息. 计算机硬件的五大单元:输入单元.输出单元.CPU内部控制单元.算术逻辑单 ...

  4. DB2 数据库中字段特定字符替换为空

    Update RM_CarInfo set ImportTitle = Replace(ImportTitle,'ZD','') WHERE ImportTitle LIKE'%ZD%';

  5. 16Aspx.com-书通网中小学生免费在线学习网站源码 带采集带手机版帝国cms内核

    =============================================== 源码站长资源交易专业网-商业源码下载,VIP源码,程序交易,毕业设计交易,站长交易|- 16aspx.c ...

  6. Sharing Cookies --AtCoder

    题目描述 Snuke is giving cookies to his three goats.He has two cookie tins. One contains A cookies, and ...

  7. luogu P1304 哥德巴赫猜想

    题目描述 输入N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想. (N为偶数). 如果一个数,例如10,则输出第一个加数相比其他解法最小的方案.如10=3+7=5+5,则10=5+ ...

  8. jzyzOJ 1658【bzoj1798改编】

    #include<iostream> #include<cstring> #include<cstdio> #include<ctime> #inclu ...

  9. hdu1070(C++)

    本题在于求单价,即为每一天(每200升牛奶)要多少钱,注意超过1000的当做5天,不足200的忽略 #include<iostream> #include<string> us ...

  10. python GIL

    https://www.cnblogs.com/MnCu8261/p/6357633.html 全局解释器锁,同一时间只有一个线程获得GIL,