tips:以下使用到的迭代器,可迭代对象,生成器等概念可以参见我的另一篇博客

lambda表达式

主要用于一行写完简单函数,简单方便,但不能使用全局变量,也不是代码块。

>>> lambda x:x+1   # 对冒号前面的x,处理为x+1并返回
>>> lambda *args: sum(args) # 对输入的多个参数求和,要求参数能做加法运算
>>> lambda **kwargs: 0 # 输入任意的键值对参数,返回0
>>> a = lambda x:x + x
>>> a(2)
4

lambda表达式经常配合map,reduce,filter这些函数使用,所以下面介绍这些函数,并结合应用。

reduce()函数

reduce(function, sequence[, initial]) -> value

tips: python3中已经放到了functools模块里面,想要使用的话需要先导入。

  • reduce的第一个参数必须是一个函数,且该函数必须接收两个参数,每次计算的结果返回给function函数的第一个参数,第二个参数依次从可迭代对象中取,见下方例子理解;
  • reduce的第二个参数是一个可迭代对象;
  • reduce的第三个参数是初始值,没有该参数则直接使用可迭代对象的第一个值。
>>> from functools import reduce
>>> reduce(lambda x,y:x+y, range(1,6))
15 # 相当于((((1+2)+3)+4)+5)
>>> reduce(lambda x,y:x+y*2, 'qwqwqw')
'qwwqqwwqqww'
>>> reduce(lambda x,y:x+y, range(1,6), 6)
21 # 相当于(((((6+1)+2)+3)+4)+5)
>>> reduce(lambda x:x+1, range(6))
TypeError: <lambda>() takes 1 positional argument but 2 were given
# 这里及下面的的lambda表达式都可以换成其他更复杂的函数

map()函数

map(func, *iterables) --> map object

一个非常好用的内建函数,将可迭代对象的每一个值依次传入func函数中进行处理,并返回一个map对象(迭代器,可以使用next()依次获取其中的值,也可以使用list进行转换。python2中返回的是一个列表)

>>> list(map(lambda x:x+x, 'qwqw'))  # 为了方便观察,使用了list函数,将map对象直接转换成列表
['qq', 'ww', 'qq', 'ww']
>>> QAQ = map(lambda x,y:x+y*2, 'qw', 'AS')
>>> next(QAQ)
'qAA'
>>> list(map(lambda x,y:x+y*2, 'q', 'AS'))
['qAA'] # 第一个参数从第一个可迭代对象取值,第二个从第二个可迭代对象取值,不够则只完成最小满足规模
>>> list(map(lambda x,y,z:x+y+z, 'q', 'AS', ''))
[]

filter()函数

filter(function or None, iterable) --> filter object

正如其名——过滤:将可迭代对象的的每个值传递给function进行处理,将满足条件的值返回到一个迭代器中。如果没有function函数,则判断可迭代对象中每个是'真'的值,见下方实验

>>> list(filter(lambda x:x>2, range(5)))
[3, 4]
>>> list(filter(lambda x: x != '', [1,'q', 2,'']))
[1, 'q', 2]
>>> list(filter(None,[-2.1, -1, 0, 1, 2]))
[-2.1, -1, 1, 2] # python中除0外都是‘真’

python-map, reduce, filter, lambda的更多相关文章

  1. Python-函数式编程-map reduce filter lambda 三元表达式 闭包

    lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 ...

  2. python map, reduce,filter 使用

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

  3. map/reduce/filter/lambda

    Python内建了map()/reduce()/filter()函数. map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的It ...

  4. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

  5. Python map,reduce,filter,apply

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

  6. Python学习:函数式编程(lambda, map() ,reduce() ,filter())

    1. lambda: Python 支持用lambda对简单的功能定义“行内函数” 2.map() : 3.reduce() : 4.filter() : map() ,reduce() , filt ...

  7. python 函数式编程之lambda( ), map( ), reduce( ), filter( )

    lambda( ), map( ), reduce( ), filter( ) 1. lambda( )主要用于“行内函数”: f = lambda x : x + 2 #定义函数f(x)=x+2 g ...

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

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

  9. Demo of Python &quot;Map Reduce Filter&quot;

    Here I share with you a demo for python map, reduce and filter functional programming thatowned by m ...

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

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

随机推荐

  1. Luogu_2774 方格取数问题

    Luogu_2774 方格取数问题 二分图最小割 第一次做这种题,对于某些强烈暗示性的条件并没有理解到. 也就是每一立刻理解到是这个图是二分图. 为什么? 横纵坐标为奇数的只会和横纵坐标为偶数的相连. ...

  2. UVALive - 2515 (最小生成树 kruskal)

    You are assigned to design network connections between certain points in a wide area. You are given ...

  3. linux crontab 计划任务设置 (简结)

    命令: crontab  -l  查看当前运行的计划任务 crontab  -e  编辑当前运行计划任务 修改或添加 VIM编辑器用法:按 i 键进入编辑文本状态, esc 结束编辑状态 , :wq ...

  4. sql-case when 条件1 then 取值1 when 条件2 then 取值2 else 取值3 end

    遇到 XXX情况 就 XXX 遇不到就 XXX 结束case when …… then …… else …… end 例如一个3条件取值的字段: case when 条件1 then 取值1 when ...

  5. iOS文本文件的编码检测

    windows上很多文本未必是用UTF8,所以在iOS上读取的时候,如何得到文件的编码是个问题.网上有很多读取中文的例子,但是那些不够通用.比如说要读取日文,韩文,阿拉伯文等等的时候,就不行了(虽然一 ...

  6. 修改系统UITableViewCell的ImageView大小

    代码如下: CGSize itemSize = CGSizeMake(, ); UIGraphicsBeginImageContext(itemSize); CGRect imageRect = CG ...

  7. 转:Sql Server中清空所有数据表中的记录

    如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍.   使用sql删除数据库中所有表是不难的 ...

  8. HP-Socket国产优秀socket通信组件推荐

    来源:http://blog.csdn.net/clb929/article/details/51085983 * HP-Socket 官方网站:http://www.jessma.org * HP- ...

  9. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

  10. 宏观看restframework序列化

    序列化 序列化意义 web有两种应用模式,一种是前后端不分离,一种是前后端分离,当前后端分离的时候,后端只需要向前端传输数据即可,不需要进行其他的操作,一般如果是中大型公司,都是前后端分离,这也是目前 ...