匿名函数lambda

lambda argument1,argument2,...argumentN :expression using arguments

1、lambda是一个表达式,而不是一个语句。

因为这一点,lambda可以出现在python语法不允许def出现的地方---例如,在一个列表常量中或者函数调用的参数中。

2、lambda 的主体是一个单个的表达式,而不是一个代码块。

lambda是一个为编写简单的函数设计的,而def用来处理更大的任务。

例如:

  1. lambda表示式写法:
    f=lambda x,y,z:x+y+z
  2.  
  3. print(f(2,3,4))
  4.  
  5. 打印结果:
  6. 9
  7.  
  8. 函数写法:
  1. def f(x,y,z):
    return x+y+z
  2.  
  3. print(f(2,3,4))
  1. 打印结果:
  2. 9
  1. lambda表示式写法:
    foo=lambda a='lll',b='que',c='rade':a+b+c
  2.  
  3. print(foo('mas'))
  4. 打印结果:
  5. masquerade
  6.  
  7. 函数写法:
  1. def foo(a='lll',b='que',c='rade'):
    return a+b+c
  2.  
  3. print(foo('mas'))
  1. 打印结果:
    masquerade
  1. l=[lambda x:x**2,lambda x:x**3,lambda x:x**4]
  2. for f in l:
  3. print(f(2))
  4. 打印结果:
  5. 4
  6. 8
  7. 16
  8.  
  9. print(l[1](3))
  10. 打印结果:
    27

 嵌套的lambda

  1. 式一:
    def foo(x):
  2. return (lambda y:x+y)
  3.  
  4. bar=foo(99)
  5. print(bar(2))
  6.  
  7. 打印结果:101
  8.  
  9. 式二:
    foo=lambda x:(lambda y:x+y)
    bar=foo(99)
    print(bar(2))
  10.  
  11. 式三:
  1. print((lambda x:(lambda y:x+y)(99))(2))
    打印结果:
    101

filter函数

filter函数会对指定序列执行过滤操作。

定义:filter(function or None, sequence) ->iterator

filter函数会对序列参数sequence中的每个元素调用function函数,最后返回的结果包含调用结果为True的元素。

返回可迭代对象,需要list调用来显示所有结果。

  1. def f(x):
  2. if x>20:
  3. return True
  4. else:
  5. return False
  6.  
  7. l1=[2,8,15,22,36]
  8. print(filter(f,l1))
  9. l2=filter(f,l1)
  10. print(l2.__next__()) #22
  11. print(l2.__next__()) #36
  12. print(l2.__next__()) #StopIteration
  13.  
  14. #或者我们可以使用for循环遍历过滤器l2:
  15. for i in l2:
  16. print(i)
  17.  
  18. 打印结果:
  19. 22
  20. 36
  1. print(list(filter(lambda x:x>0,range(-5,5)))) #[1, 2, 3, 4]
  1. print(list(filter(None,[1,2,3,4,5]))) #[1, 2, 3, 4, 5]

map(func,iter1,iter2)函数-> iterator

通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个迭代器。

function可以理解为是一个一对一或多对一函数,map的作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的迭代器。

返回可迭代对象,需要调用list来显示所有结果。

  1. def f(x,y):
  2. return (x,y)
  3. l1 = [ 0, 1, 2, 3, 4, 5, 6 ]
  4. l2 = [ 'Sun', 'M', 'T', 'W', 'T', 'F', 'S' ]
  5. l3=map(f,l1,l2)
  6. # print(l3) #<map object at 0x0000000002301470>
  7. print(list(l3)) #[(0, 'Sun'), (1, 'M'), (2, 'T'), (3, 'W'), (4, 'T'), (5, 'F'), (6, 'S')]
  8.  
  9. def f2(x):
  10. return x**2
  11. print(list(map(f2,l1))) #[0, 1, 4, 9, 16, 25, 36]
  12.  
  13. def f3(x,y):
  14. return x*2,y*2
  15.  
  16. print(list(map(f3,l1,l2))) #[(0, 'SunSun'), (2, 'MM'), (4, 'TT'), (6, 'WW'), (8, 'TT'), (10, 'FF'), (12, 'SS')]
  1. print(list(map(lambda x: x + 2, [1, 2, 3]))) #[3, 4, 5]
  2. print(list(map(pow,[1,2,3],[2,3,4]))) #[1, 8, 81]
  3. #pow(x,y)是计算x的y次幂(方)

reduce函数

在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里,用的话要先引入:即functools.reduce(function,sequence,initial)

reduce函数会对参数序列中元素进行累积。

定义:

function参数是一个有两个参数的函数,reduce依次从iterable中取一个元素,和上一次调用function的结果做参数再次调用function。

第一次调用function时,如果提供initial参数,会以iterable中的第一个元素和initial作为参数调用function,否则会以iterable中的前两个元素做参数调用function。

等价于:

  1. def reduce(function, iterable, initializer=None):
  2.  
  3. it = iter(iterable)
  4.  
  5. if initializer is None:
  6.  
  7. value = next(it)
  8.  
  9. else:
  10.  
  11. value = initializer
  12.  
  13. for element in it:
  14.  
  15. value = function(value, element)
  16.  
  17. return value

示例:

  1. import functools
  2.  
  3. print(functools.reduce(lambda x,y:x+y,[1,2,3,4])) #10
  4. print(functools.reduce(lambda x,y:x+y,[1,2,3,4],10)) #20
  5. print(functools.reduce(lambda x,y:x*y,[1,2,3,4])) #24
  6.  
  7. ##############
  8. 如果没有initial参数,这么算:(((1+2)+3)+4
  9.  
  10. 如果有initial参数,这么算: ((((10+1)+2)+3)+4

注意:function函数不能为None,function必须是有2个参数的函数。

zip函数

定义:zip([seql, ...])接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。

  1. print(list(zip([1,2,3],[11,22,33]))) #两个列表长度一致
  2.  
  3. #[(1, 11), (2, 22), (3, 33)]
  4. print(list(zip([1,2,3],[11,22,33,44,55]))) #两个列表长度不一致,以短的为准
  5.  
  6. #[(1, 11), (2, 22), (3, 33)]

Python常用内置函数整理(lambda,reduce,zip,filter,map)的更多相关文章

  1. python常用内置函数整理

    1.最常见的内置函数是print print("Hello World!") 2.数学运算 abs(-5) # 取绝对值,也就是5 round(2.6) # 四舍五入取整,也就是3 ...

  2. python常用内置函数

    Python所以内置函数如下: 下面列举一些常用的内置函数: chr()和ord() chr()将数字转换为对应的ascii码表字母 >>> r=chr(65) >>&g ...

  3. Python常用内置函数介绍

    Python提供了一个内联模块buildin.内联模块定义了一些开发中经常使用的函数,利用这些函数可以实现数据类型的转换.数据的计算.序列的处理等功能.下面将介绍内联模块中的常用函数. Python内 ...

  4. $Python常用内置函数典型用法

    Python中有许多功能丰富的内置函数,本文基于Python 2.7,就常用的一些函数的典型用法做一些积累,不断更新中. sorted函数的三种用法 # coding:utf-8 # sorted函数 ...

  5. python常用内置函数和关键字

    常用内置方法 在Python中有许许多多的内置方法,就是一些Python内置的函数,它们是我们日常中经常可以使用的到的一些基础的工具,可以方便我们的工作. 查看所有的内置类和内置方法 # 方法一 bu ...

  6. python常用内置函数用法精要

    用一个表格大致总结一下所有的内置函数用法,如下: 函数 功能简要说明 abs(x) 返回数字x的绝对值或复数x的模 all(iterable) 如果对于可迭代对象中所有元素x都等价于True,则返回T ...

  7. python常用内置函数(转载)

    1. 和数字相关 1.1 数据类型 1.2 进制转换 1.3 数学运算 2. 和数据结构相关 2.1 序列 2.2 数据集合 2.3 相关内置函数 3. 和作用域相关 4. 和迭代器生成器相关 5. ...

  8. python 常用内置函数简介

    1.作用域相关内置函数globals()--获取全局变量的字典locals()--获取执行本方法所在命名空间内的局部变量的字典 2.和调用相关callable(o),o是参数,看这个变量是不是可调用. ...

  9. 内置函数_map()、reduce()、filter()

    map().reduce().filter() map()内置函数把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过 ...

随机推荐

  1. C++ lower_bound 与 upper_bound 函数

    头文件: #include  <algorithm> 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound lower_bound(起始地址,结束地址 ...

  2. 使用eclipse制作war包方法 web项目打包到tomcat

    打开eclipse在左侧右击项目名选择“Export”   在导出画面点击 “Web”->“WAR file”点击“Next”   点击“Browse…”选择文件的导出位置,Target run ...

  3. Nginx 模块 - ngx_http_rewrite_module

    原文地址 ngx_http_rewrite_module 模块用于通过 PCRE 正则表达式改变请求 URI,返回重定向并可以有条件地选择配置. break.if.return.rewrite 以及 ...

  4. 16/7/8_PHP-书写规范 PHP Coding Standard

    变量命名规范这里感觉 打算采用 匈牙利命名法+驼峰法命名,因为 PHP是弱类型语言,很多时间因为忽略了变量类型而导致犯一些低级错误.所以在前面加上类型名有助于更好的理解代码. 下载是转载 PHP书写规 ...

  5. 有意思的B+树漫画介绍

    转载自:伯乐专栏作者/玻璃猫,微信公众号 - 梦见 漫画:什么是b+树 这一次我们来介绍 B+ 树. 一个m阶的B树具有如下几个特征: 1.根结点至少有两个子女. 2.每个中间节点都包含k-1个元素和 ...

  6. [6期]Webshell提权服务器登录

    这一期内容较少,分享一点资料给大家吧:https://www.bilibili.com/video/av27708518/?spm_id_from=333.788.b_636f6d6d656e74.9 ...

  7. [未解决]报错: crawlab启动失败

    拉取镜像 docker pull tikazyq/crawlab:latest 一键启动 docker-compose up 报错提示:

  8. BZOJ 4675(点分治)

    题面 传送门 分析 由于期望的线性性,我们可以分别计算每个点对对答案的贡献 有三个人取数字,分开对每个人考虑 设每个人分别取了k个数,则一共有\(C_n^k\)种组合,选到每种组合的概率为\(\fra ...

  9. BZOJ 1937 (luogu 4412) (KM+LCA)

    题面 传送门 分析 根据贪心的思想我们得到几条性质: 1.生成树上的边权减小,非树边的边权增加 2.每条边最多被修改一次 设改变量的绝对值为d 对于一条非树边\(j:(u,v)\),树上u->v ...

  10. go 结构体取代类

    我们知道go的结构体有点类的感觉,可以有自己的属性和方法. 但是由于结构体的属性都是有零值的,我们在创建结构体的时候并不需要设置这些属性的值就能创建,但是这样创建的结构体往往没有什么实用价值. 我们可 ...