1. map() 函数的功能:

map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)]

  1. def f(x):
  2. return x*x
  3. a = map(f, [1, 2, 3, 4, 5])
  4. b = map(f, (6, 7, 8, 9))
  5. print a
  6. print b
  7. # [1, 4, 9, 16, 25]
  8. # [36, 49, 64, 81]
  9.  
  10. # a = map(f, 1,2,3,4,5,6,7)
  11. # print a
  12. # Traceback (most recent call last):
  13. # File "C:/workplace/SVC/DiskVideoTask/modules/test_mapReduce.py", line 8, in <module>
  14. # a = map(f, 1,2,3,4,5,6,7)
  15. # TypeError: argument 2 to map() must support iteration

2. reduce()的用法:
reduce(f, [x1, x2, x3]) = f(f(f(x1,x2),x3),x4).

  1. def add(x,y):
  2.   return x+y
  3.  
  4. print reduce(add,[1,2,3,4,5])
  5. #
  6.  
  7. def str2int(s):
  8.   def fn(x,y):
  9.     return x * 10 + y
  10.  
  11.   def char2num(s):
  12.     return {'':0, '':1, '':2, '':3,
  13.     '':4, '':5, '':6, '':7, '':8,'':9
  14.     }[s]
  15.   return reduce(fn,map(char2num,s))
  16.  
  17. print str2int('')
  18.  
  19. #

3. filter()的用法

filter(f, [x1,x2,x3]) = [x1], f(x1)=True, f(x2)=False, f(x3)=False
注意: filter参数中f函数返回的是布尔类型的值, filter根据f(x1)返回的值是否是True而决定是否返回x1.

  1. def is_odd(n):
  2. return n % 2 == 1
  3.  
  4. print filter(is_odd, [1,2,3,4,5,6,7])
  5.  
  6. def not_empty(s):
  7. return s and s.strip()
  8. # 若 s and s.strip() 这个与命题结果为空字符,那么结果为False.
  9. # 若 s and s.strip() 这个与命题结果为非空字符串,那么结果为True.
  10.  
  11. print filter(not_empty, ['A', 'B ', '', None, ' '])
  12. # ['A', 'B ']

4. sorted()的用法
内建函数sorted()默认排序顺序为:
   对于两个元素x和y,如果x<y,则返回-1;
          如果x==y,则返回0;
          如果x>y, 则返回1.

  1. print sorted([36,5,11,9,22])
  2. # [5, 9, 11, 22, 36]
  3. # 如果是数字,默认按从小到到的顺序排列.
  4. print sorted(['I','Hello','Gim', 'you', 'him', 'apple', 'banana'])
  5. # ['Gim', 'Hello', 'I', 'apple', 'banana', 'him', 'you']
  6. # 如果是字符串,默认先比较大写字符串的大小,然后再比较小写字符创的大小。都是从小到大顺序排列。

sorted()函数也是一个高阶函数。可以接收一个自定义的排序函数,从而来为给出的序列排序。
若希望数字从大到小排列。那么自定义一个函数revered_cmp

  1. def revered_cmp(x,y):
  2. if x > y:
  3. return -1
  4. if x < y:
  5. return 1
  6. return 0
  7.  
  8. print sorted([36,5,11,9,22], revered_cmp)
  9. # [36, 22, 11, 9, 5]

若希望字符串忽略大小写来排序。那么字定义一个函数cmp_ignore_case.

  1. def cmp_ignore_case(s1,s2):
  2. u1 = s1.upper()
  3. u2 = s2.upper()
  4. if u1 > u2:
  5. return 1
  6. if u1 < u2:
  7. return -1
  8. return 0
  9. print sorted(['I','Hello','Gim', 'you', 'him', 'apple', 'banana'], cmp_ignore_case)
  10. # ['apple', 'banana', 'Gim', 'Hello', 'him', 'I', 'you']

显然,map, reduce, filter, sorted都是高阶函数。分别实现了映射,连续计算,过滤,排序。

高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。

匿名函数

Python有两种函数,一种是用def定义的,另一种则是接下来要谈的匿名函数,用lambda定义的。

为什么要用匿名函数?

1. 有些程序代码只出现一次,即一次性的,那么用匿名函数,不需要定义函数名,节省内存中的变量空间。

2. 使代码更加简洁。

  1. result = filter(lambda x: x>3, [1,2,3,4,5])
  2. print result
  3. #[4, 5]

若filter函数中的匿名函数所起的作用是一次性的,我们就用匿名函数来实现这个函数功能。

匿名函数的几个规则:

1. 不用函数名

2. 可以没有参数,可以有多个参数,参数可以带默认值。

3. 函数中只能写一个表达式。

4. 不用写return, 返回值就是表达式的结果

应用:

匿名函数一般应用于函数式编程。常和map, reduce 和 filter函数结合使用。

Python map/reduce/filter/sorted函数以及匿名函数的更多相关文章

  1. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  2. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  3. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  4. python函数式编程学习之map,reduce,filter,sorted

    map(f, list)函数用于将函数f运用到list里的每个元素中 写个例子 def pow(x): return x*x map(pow, [2,3,4]) reduce(f, list)函数用于 ...

  5. python基础之map/reduce/filter/sorted

    ---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...

  6. 函数式编程 高阶函数 map&reduce filter sorted

    函数式编程 纯函数:没有变量的函数 对于纯函数而言:只要输入确定,那么输出就是确定的.纯函数是没有副作用的. 函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数 高阶函数:一个函数的 ...

  7. python map, reduce,filter 使用

    参考python built-on function: http://docs.python.org/2.7/library/functions.html?highlight=map%20reduce ...

  8. Python map,reduce,filter,apply

    map(function, iterable, ...) map()函数接收两个参数,一个是函数,一个是可迭代的对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 基本等 ...

  9. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

随机推荐

  1. QWebView使用

      问题: 开始编译的时候在pro文件中要加上 QT += core gui webkitwidgets 文件使用部分加上 #include<QtWebKitWidgets/QWebView&g ...

  2. spark第四篇:Running Spark on YARN

    确保HADOOP_CONF_DIR或者YARN_CONF_DIR指向hadoop集群配置文件目录.这些配置用来写数据到hdfs以及连接yarn ResourceManager.(在$SPARK_HOM ...

  3. merchantInfo.properties配置文件

    p1_MerId=10001126856 keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl callback= ...

  4. andoid 多线程断点下载

    本示例介绍在Android平台下通过HTTP协议实现断点续传下载. 我们编写的是Andorid的HTTP协议多线程断点下载应用程序.直接使用单线程下载HTTP文件对我们来说是一件非常简单的事.那么,多 ...

  5. ZwQueryVirtualMemory暴力枚举进程模块

    0x01 前言 同学问过我进程体中EPROCESS的三条链断了怎么枚举模块,这也是也腾讯面试题.我当时听到也是懵逼的. 后来在网上看到了一些内存暴力枚举的方法ZwQueryVirtualMemory. ...

  6. Django 入门项目案例开发(上)

    关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. Django 入门案例开发(中) http://www.cnblogs.com/focusBI ...

  7. 环境搭建:JDK--SSH--VIM--Hadoop--SybaseIQ

    放假闲来无事,就自己搭建了一套环境,包含: 工具:ssh,vim    环境:Jdk,Hadoop 在此记录,下次使用 1.工具类 ssh和vim两个常用的工具就是两条命令: vim命令:sudo a ...

  8. mongo 多条件or

    or语句 or b=2 > db.XXX.find({"$or":[{"a":1}, {"b":2}]});  等于java mong ...

  9. ubuntu系统操作

    给ubuntu配置解析主机名 vim  /etc/hosts 192.168.23.44  Evelyn

  10. html结构内容拾忆

    文本格式化: <b>This text is bold</b><!--定义粗体文本.--> <strong>This text is strong< ...