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. js尾巴

    js中根据id获取标签: /** * 根据id获取标签 * @param {string}id * @returns {object} */ function $(id) { return typeo ...

  2. ArcMap中用python的split方法提取字段的值

    提取PROPERTY_L字段空格分隔符前面的地址编号 提取前:5105 ABERDEEN LANE 提取后:5105 提取的表达式:!PROPERTY_L!.split(" ")[ ...

  3. Python装饰器高级用法

    在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...

  4. win10 切换网卡的bat

    @echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system3 ...

  5. 虚拟机系统ubuntu12.04(内网环境下的虚拟主机)开启远程连接访问

    一.工具准备: 1.内网虚拟机Ubuntu12.04系统主机一台,开放端口为:29999 2.远程连接软件:mobaxterm 二.开启步骤: 1.查看端口状态信息: netstat -antl | ...

  6. MVC三层架构的分层开发思想

  7. 使用docker-compose运行微服务项目#eureka+config+auth+gateway+module

    微服务架构中我们使用了必须的四个组件,eureka config gateway auth 其中config依赖eureka,auth依赖前两者,gateway又依赖auth 这样就确定了四个组件的启 ...

  8. C语言/C++编程学习:栈的代码实现之数组方案

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  9. 重学Veriliog(2)——高级编程语句

    1.判断 1.1 if ... else ... 有优先级 在组合逻辑电路中,需要避免产生Latch(避免结构不完整) Latch容易引起竞争冒险,同时静态时序分析工具也不好分析穿过Latch的路径? ...

  10. SpringBoot 启动报The Java Virtual Machine has not been configured to use the desired default character encoding (UTF-8)

    解决方法: 启动的时候在VM中添加 Dfile.encoding=UTF-8 就好了!