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. Vue学习—Vue写一个图片轮播组件

    1.先看效果: 熟悉的图片轮播,只要是个网站,百分之90以上会有个图片轮播.我认为使用图片轮播. 第一可以给人以一种美观的感受,而不会显得网站那么呆板, 第二可以增加显示内容,同样的区域可以显示更多内 ...

  2. leetcode -50. Pow(x, n) Accepted

    前言:其实之前自己也有了解关于算法数据结构的一点内容,但是都是用相应的开发工具来写相应的代码,今天面试的时候直接leetcode来写代码,还是用的体内根深蒂固的C和Java来解的题,毕竟目前没见支持O ...

  3. Spring Cloud Sleuth 之Greenwich版本全攻略

    微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性较高,如果出现了错误和异常,很难去定位.主要体现在一个请求可能需要调用很 ...

  4. RHS 和 LHS

    不成功的的RHS 引用会导致抛出 ReferenceError异常 不成的的LHS 引用会导致自动隐式地创建一个全局变量(非严格模式下)   function foo(a) { var b = a; ...

  5. codeforces 979 C. Kuro and Walking Route

    C. Kuro and Walking Route time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  6. ubuntu远程桌面

    用Linux已经有很长一段时间,但主要用于嵌入式开发(用交叉工具链进行版本编译),所以用命令行就可以了,而且敲的最多的命令就是make.最近开始搭建TensorFlow的开发环境,大部分工作都是命令行 ...

  7. VS2015调试,签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe

    1.发布项目是出现这个错误网上找了有两种方式, 一种是重新安装VS2015的ClickOnce程序 第二种是修改项目文件的签名 右击项目文件的属性,选择签名,然后把红框内去掉,保存即可.

  8. linux的用户管理相关配置文件

    Linux的管理命令的本质不过是对配置文件/etc相关文件的修改罢了 

  9. [译]C语言实现一个简易的Hash table(5)

    上一章中,我们使用了双重Hash的技术来处理碰撞,并用了C语言实现,贲张我们将实现Hash表中的插入.搜索和删除接口. 实现接口 我们的hash函数将会实现如下的接口: // hash_table.h ...

  10. PHP打包zip并下载

    $file_template = FCPATH.'canddata/cand_picture.zip';//在此之前你的项目目录中必须新建一个空的zip包(必须存在) $downname = $car ...