zoukankan      html  css  js  c++  java
  • python lambda表达式

    原文:https://blog.csdn.net/zjuxsl/article/details/79437563 

    一、lambda语法: lambda argument_list: expression

    argument_list是参数列表,它的结构与Python中函数(function)的参数列表是一样的(输入)

    expression是一个关于参数的表达式。表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行(输出)

    • lambda函数:又称匿名函数
    • lambda函数有输入和输出输入是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的值。
    • lambda函数功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑

    二、示例

    lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y

    lambda:None;函数没有输入参数,输出是None

    lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)

    lambda **kwargs: 1;输入是任意键值对参数,输出是1

    三、用法

    1、将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。

    例如,add=lambda x, y: x+y

      add(1,2),输出为3。

    2、将lambda函数赋值给其他函数从而将其他函数用该lambda函数替换。

    例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。

    这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。

    例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。

    3. 将lambda函数作为其他函数的返回值,返回给调用者。

    函数的返回值也可以是函数

    例如,return lambda x, y: x+y  返回:加法函数。

    这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数

    对应的,将包含嵌套函数的函数称之为外部函数。

    内部函数能够访问外部函数的局部变量。

    4. 将lambda函数作为参数传递给其他函数。

      部分Python内置函数接收函数作为参数。典型的此类内置函数有这些。

    •   filter函数。

        此时lambda函数用于指定过滤列表元素的条件。

        例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。

    •   sorted函数。

        此时lambda函数用于指定对列表中所有元素进行排序的准则。

        例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))

          将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

    •   map函数。

        此时lambda函数用于指定对列表中每一个元素的共同操作。

        例如map(lambda x: x+1, [1, 2,3])将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。

    •   reduce函数。

        此时lambda函数用于指定列表中两两相邻元素的结合条件。

        例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])将列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素从左往右两两以逗号分隔的字符的形式依次结合起来,其结果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。

    另外,部分Python库函数也接收函数作为参数,例如gevent的spawn函数。此时,lambda函数也能够作为参数传入。

  • 相关阅读:
    ExtJS小技巧
    Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
    NPM 私服
    IDEA 不编译java以外的文件
    SQL 引号中的问号在PrepareStatement 中不被看作是占位符
    Chrome 浏览器自动填表呈现淡黄色解决
    批量删除Maven 仓库未下载成功.lastupdate 的文件
    Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)
    Hibernate 自动更新表出错 建表或添加列,提示标识符无效
    Hibernate 自动更新表出错 More than one table found in namespace
  • 原文地址:https://www.cnblogs.com/jszfy/p/11148963.html
Copyright © 2011-2022 走看看