• Python中的lambda函数介绍


    Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)。

    一、lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:

    def f(x):
    return x**2
    print f(4)

    Python中使用lambda的话,写成这样

    = lambda x : x**2
    print g(4)

    二、lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。

    其实说的没错,lambda在Python这种动态的语言中确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。

    1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

    2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

    3. 使用lambda在某些时候让代码更容易理解。

    lambda基础

    lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象:

    lambda函数一般遍历的时候是和三个函数一起嵌套使用map(),reduc()以及filter()函数

    >>> foo = [218922172481227
    >>> print filter(lambda x: x % 3 == 0, foo)
    [189241227]

     Python中的filter( )函数接受一个列表参数和一个lambda函数参数。

    >>> print map(lambda x: x * 2 + 10, foo)
    [144628544458263464]

     传入map()函数的迭代器可以是字典,列表等。map()函数主要是根据lambda函数定义的逻辑来将输入迭代器中的每一项映射到输出迭代器中的相关项。

    >>> print reduce(lambda x, y: x + y, foo)
    139

    在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。

    defaultdict是字典类型,可以为defaultdict设置默认值,可以通过lambda设置默认值。

    下面举几个例子:

    from collections import *             
    = defaultdict(lambda:0//默认值是0
    print x[0]
    =defaultdict(lambda:defaultdict(lambda:0))//默认值是一个字典,字典的默认值是0
    print y[0]
    = defaultdict(lambda:[0,0,0])//默认值是一个列表,[0,0,0].
    print z[0]

    输出结果:

    0
    defaultdict(<function <lambda> at0x7f097797af50>, {}) 
    [000]

    注意:在Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在放置在functools 模块里,如果想要使用它,则需要通过引入functools 模块来调用reduce() 函数

  • 相关阅读:
    UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
    UVA 211 The Domino Effect 多米诺效应 (回溯)
    UVA225 Golygons 黄金图形(dfs+回溯)
    UVA208 Firetruck 消防车(并查集,dfs)
    UVA11212 EditingaBook ( IDA*搜索)
    UVA 140 Brandwidth 带宽 (dfs回溯)
    uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)
    UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )
    cdoj 414 八数码 (双向bfs+康拓展开,A*)
    UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12196840.html
Copyright © 2020-2023  润新知