zoukankan      html  css  js  c++  java
  • 第21讲:lambda表达式

    一 lambda表达式

    1 功能: lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数

    2 概念:https://www.runoob.com/python/python-functions.html

    • lambda只是一个表达式,函数体比def简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    3 语法:name = lambda [list] : 表达式

    其中,定义 lambda 表达式,必须使用 lambda 关键字;冒号前面[list] 作为可选参数,等同于定义函数是指定的参数列表;冒号右边的返回值,name为该表达式的名称,可用name调用该表达式。

    4 lamnda与命名函数的区别(https://blog.csdn.net/answer3lin/article/details/86352009

    • lambda不创建接收变量
      • def创建的方法是有名称的,而lambda没有,可以立刻传递(无需变量)。
      • python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
    • python中的lambda只是一个表达式,而def是一个语句
      • lambda表达式运行起来像一个函数,当被调用时创建一个框架对象。因此语句嵌套用def,表达式嵌套用lambda。
      • 因为这一点,lambda能够出现在Python语法不允许def出现的地方。例如,在一个列表常量中或者函数调用的参数中。
      • 此外,作为一个表达式,lambda返回了一个值(一个新的函数),可以选择性的赋值给一个变量名。相反,def语句总是得在头部将一个新的函数赋值给一个变量名,而不是将这个函数作为结果返回。
    • 在内部只能包含一行代码
      • lambda表达式” : “后面,只能有一个表达式,def则可以有多个。 lambda表达式内部只能包含一行代码,而命名函数内对此无限制。
      • lambda的主体是一个单个的表达式,而不是一个代码块。这个lambda的主体简单得就好像放在def主体的return语句中的代码一样
      • 它限制了程序的嵌套:lambda是一个为编写简单的函数而设计的,而def用来处理更大的任务。
    • 自动返回结果
      • 返回lambda表达式中最后一个表达式的值。
    • lambda可以直接作为python列表或python字典的成员
    • 嵌套问题
      • 像if或for或print等语句不能用于lambda中,def可以。
      • 在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。
    • 目的不同
      • lambda一般用来定义简单的函数,而def可以定义复杂的函数。 
    • 不可重用
      • lambda函数不能共享给别的程序调用,def可以。 

    5 使用lambda表达式的优缺点

    • 优点
      • 对于单行函数,使用lambda可以省去定义函数的过程,让代码更加精简。
      • 在非多次调用的函数的情况下,lambda表达式即用即得,提高性能。
        • 注意:如果for..in..if(python中另外一个简单表达式)能做的,最好不要选择lambda。
      • 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
      • 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
      • 使用lambda在某些时候让代码更容易理解。
      • 代码简洁,不增加额外变量。
    • 缺点
      • 对很多 Python 程序员来说, lambda 表达式是一种古怪而又陌生的语法。
      • lambda 函数本身缺少名称和文档, 意味着了解它们功能的唯一方式就是读代码,让代码变得更加晦涩。
      • lambda 表达式只能包含一条语句, 因此某些提高可读性的语言功能, 如元组拆包, 不能与它们一起使用。
      • lambda 函数通常可以被替换为标准库中已存在的函数或 Python 内置的函数,利用已有函数是更好的选择。

    6 使用lambda注意事项

    • lambda 函数可以接收任意多個参数 (包括可选参数) 并且返回单个表达式的值。 
    • lambda 函数不能包含命令,包含的表达式不能超过一个。
    • 即使是print语句也不能用在 lambda形式中,只能使用表达式。并且匿名函数中不能出现if或者for等一些条件判断,循环的语句。
    • lambda表达式返回的函数直接返回这一句表达式的值。没有return,最后一个表达式的值即返回值。
    • 匿名函数(lambda表达式),只能写在一行上,所以也有人也叫他单行函数。
    • 参数列表不需要用括号。
    • 冒号不是用来开始新语句块的。
    • lambda 定义了一个匿名函数
    • lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
    • 如果可以使用for...in...if来完成的,坚决不用lambda。
    • 如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
    • 在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
    • 由于可读性方面的考虑,应该避免使用嵌套lambda。
      • 直接调用
      • 普通函数所支持的参数的变化,匿名函数都支持的

    二 两个内置函数BIF

    1 filter()函数

    • 功能:filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
    • 语法:newIter = filter(function, iterable)
    • 参数:
      • function:可传递一个用于判断的函数,也可以将该参数设置为 None。
      • iterable:可迭代对象,包括列表、元组、字典、集合、字符串等。
      • newIter:在 Python 2.x 中,该函数返回过滤后得到的新列表;而在 Python 3.x 中,该函数返回一个迭代器对象,可以用 list()、tuple() 等方法获取过滤后得到的新序列。
    • filter()和map一样,接收一个函数和一个序列。和map不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

    2 map()函数

    • 功能:map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
    • 语法:map(function, iterable, ...)
    • 参数:
      • function -- 函数
      • iterable -- 一个或多个序列
    • 返回值:
      • Python 2.x 返回列表。
      • Python 3.x 返回迭代器。
    • 应用:https://blog.csdn.net/yu_1628060739/article/details/102695207
      • map()函数可以做类型转换
      • map()函数可以格式化输入一行整数
      • map()函数可以把一个list,转换为另一个新的list,它并不改变原来的list
      • list可以包含任意的类型,因此map()函数可以处理任意类型的list,前提条件是f函数包含这种类型
      • map()函数可以并行的处理每一个list (list中的元素种类必须一致)
  • 相关阅读:
    postman:模拟发送一个需要 cookie 认证的请求
    TCP/IP体系结构-测试人员必须理解的
    软件测试基本方法_之验收测试
    软件测试基本方法_之集成测试和系统测试
    聊天类APP功能测试点
    软件测试中的测试数据准备
    兼容性测试
    测试面试题集合
    Python3连接数据库,读取数据
    Python3读取Excel数据
  • 原文地址:https://www.cnblogs.com/luoxun/p/13294912.html
Copyright © 2011-2022 走看看