精华内容
下载资源
问答
  • Python lambda

    2020-08-15 17:11:36
    Python lambda介绍 在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?  下面就上面的问题进行一下解答。  1、lambda是什么?  看个例子:  ...

    Python lambda介绍

      在学习python的过程中,lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda?

      下面就上面的问题进行一下解答。

      1、lambda是什么?

        看个例子:     

        g = lambda x:x+1

      看一下执行的结果: 

      g(1)

      >>>2

      g(2)

      >>>3

      当然,你也可以这样使用:

      lambda x:x+1(1)

      >>>2   

      可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

    1 def g(x):
    2 return x+1

      非常容易理解,在这里lambda简化了函数定义的书写形式。是代码更为简洁,但是使用函数的定义方式更为直观,易理解。

      Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce  

    复制代码
    >>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
    >>>
    >>> print filter(lambda x: x % 3 == 0, foo)
    [18, 9, 24, 12, 27]
    >>>
    >>> print map(lambda x: x * 2 + 10, foo)
    [14, 46, 28, 54, 44, 58, 26, 34, 64]
    >>>
    >>> print reduce(lambda x, y: x + y, foo)
    139
    复制代码

      上面例子中的map的作用,非常简单清晰。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。

      比如上面map的例子,可以写成:

        print [x * 2 + 10 for x in foo]

      非常的简洁,易懂。

      filter的例子可以写成:

        print [x for x in foo if x % 3 == 0]

      同样也是比lambda的方式更容易理解。


      上面简要介绍了什么是lambda,下面介绍为什么使用lambda,看一个例子(来自apihelper.py):  

    processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

      在Visual Basic,你很有可能要创建一个函数,接受一个字符串参数和一个 collapse 参数,并使用 if 语句确定是否压缩空白,然后再返回相应的值。这种方式是低效的,因为函数可能需要处理每一种可能的情况。每次你调用它,它将不得不在给出你所想要的东西之前,判断是否要压缩空白。在 Python 中,你可以将决策逻辑拿到函数外面,而定义一个裁减过的 lambda 函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很少引起那些令人讨厌 (哦,想到那些参数就头昏) 的错误。

      通过此例子,我们发现,lambda的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果不是非常熟悉python的人或许会对此感到不可理解。


      lambda 定义了一个匿名函数

      lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

      如果可以使用for...in...if来完成的,坚决不用lambda。

      如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。


      总结:lambda 是为了减少单行函数的定义而存在的。



    展开全文
  • python lambda

    2016-09-28 19:14:21
    lambda是在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢? 1 python lambda会创建一个函数对象,但不会把这个函数对象赋...
    python
     lambda是在python中使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python
     lambda还有哪些和def不一样呢?

    1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
    2 python lambda它只是一个表达式,而def则是一个语句。

    下面是python lambda的格式,看起来好精简阿。
    lambda x: print x

    如果你在python 列表解析里用到python lambda,我感觉意义不是很大,因为python lambda它会创建一个函数对象,但马上又给丢弃了,因为你没有使用它的返回值,即那个函数对象。也正是由于lambda只是一个表达式,它可以直接作为python 列表python 字典的成员,比如:

    info = [lambda a: a**3, lambda b: b**3]

    在这个地方没有办法用def语句直接代替。因为def是语句,不是表达式不能嵌套在里面,lambda表达式在“:”后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

    下面举几个python lambda的例子吧
    1单个参数的:
    g = lambda x:x*2
    print g(3)
    结果是6

    2多个参数的:
    m = lambda x,y,z: (x-y)*z
    print m(3,1,2)
    结果是4


    ambda只是一个表达式,函数体比def简单很多。

    lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

    lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

    如下例子:

    定义了一个lambda表达式,求三个数的和。

    再看一个例子:

    用lambda表达式求n的阶乘。

    ------------------------------

    lambda表达式也可以用在def函数中。

    看例子:

    这里定义了一个action函数,返回了一个lambda表达式。其中lambda表达式获取到了上层def作用域的变量名x的值。

    a是action函数的返回值,a(22),即是调用了action返回的lambda表达式。

    这里也可以把def直接写成lambda形式。如下



    没事写程序的时候多用用python lambda就熟练了。。
    展开全文
  • python lambda_Python Lambda

    2020-07-07 01:44:52
    python lambdaHello python learners, hope all are ... Today we will learn about the python lambda function. Keyword lambda in python is used to create anonymous functions. Anonymous functions are th...

    python lambda

    Hello python learners, hope all are well. Today we will learn about the python lambda function. Keyword lambda in python is used to create anonymous functions. Anonymous functions are those functions who are unnamed. That means you are defining a function without any name of the function.

    python学习者您好,希望一切都好。 今天,我们将学习python lambda函数。 python中的关键字lambda用于创建匿名函数 。 匿名函数是那些未命名的函数。 这意味着您正在定义一个没有任何功能名称的功能。

    Python Lambda (Python lambda)

    The following is a basic syntax of writing anonymous function using lambda.

    以下是使用lambda编写匿名函数的基本语法。

    lambda arguments: expression

    Compare the above with function structure:

    将以上内容与功能结构进行比较:

    def functionName( arguments ):
    	statements...
    	return something

    Notice that, def is replaced by the keyword lambda, then there is no function name, after that arguments are as usual arguments.

    请注意,def被关键字lambda代替,然后没有函数名,因为该参数是通常的参数。

    Function contains some statement then may return some value or not. But using lambda, it will contain an expression that will be returned.

    函数包含一些语句,然后可能会返回一些值或不会返回某些值。 但是使用lambda ,它将包含一个将返回的表达式。

    Python Lambda函数 (Python lambda function)

    def squareof(x):
       return x*x
    
    p = squareof(5)
    print(p)

    We can convert above function to python lambda function as follows:

    我们可以将上述函数转换为python lambda函数,如下所示:

    f = lambda x: x*x
    p = f(5)
    print(p)

    Python lambda function will always return the output of the expression. The following is another example that takes two argument and return the greater one.

    Python lambda函数将始终返回表达式的输出。 以下是另一个带有两个参数并返回更大的参数的示例。

    The output is:

    输出为:

    14

    Python lambda function is helpful for map or filtering of any list.

    Python lambda函数有助于映射或过滤任何列表。

    filter()中的Python lambda函数 (Python lambda function in filter())

    If I want to filter from a list whether the values in the list are having length of 3. Notice that filter() is a function that takes two arguments. One is a function and the second one is a list of values. The following is the code for it:

    如果我想从列表中筛选列表中的值的长度是否为3。请注意filter()是一个带有两个参数的函数。 一个是函数,第二个是值列表。 以下是它的代码:

    weekdays = ['sun', 'mon', 'tues', 'wed', 'thurs', 'fri']
    days = filter(lambda day: day if len(day)==3 else '', weekdays)
    for d in days:
       print(d)

    Output will be:

    输出将是:

    sun
    mon
    wed

    In line 2, the function argument is an anonymous function, which takes arguments from the list of weekdays. And check whether the length of the value is equal to 3 or not. If 3 then return the value else nothing will be returned. And the output is according to what we wanted.

    在第2行中,函数参数是一个匿名函数,该函数从工作日列表中获取参数。 并检查值的长度是否等于3。 如果为3,则返回该值,否则将不返回任何内容。 输出是根据我们想要的。

    在map()中使用python lambda函数 (Use of python lambda function in map())

    We can also use lambda in map(). map is a function that takes two argument one is function, another is a list. The following code is an example which finds the remainder of all the number by 5.

    我们也可以在map()中使用lambda 。 map是一个带有两个参数的函数,一个是函数,另一个是列表。 以下代码是一个示例,该示例将所有数字的余数乘以5。

    numbers = [ 74, 85, 14, 23, 56, 31,44 ]
    
    remainders = map(lambda num: num%5, numbers)
    for i in remainders:
       print(i)

    The output will be:

    输出将是:

    4
    0
    4
    3
    1
    1
    4

    Thus you can create anonymous function using the python lambda keyword. For small functions, lambda is helpful like shown above. Python lambda is similar to python list comprehension – both are a way to reduce the number of lines of code.

    因此,您可以使用python lambda关键字创建匿名函数。 对于小函数, lambda很有帮助,如上所示。 Python lambda与python列表理解类似–两者都是减少代码行数的方法。

    In many other function that takes function as input argument, you can use anonymous function using lambda keyword.

    在将函数作为输入参数的许多其他函数中,可以使用使用lambda关键字的匿名函数。

    Hope now you will be able to play with the anonymous function and got understanding of lambda function in python. Thank you for reading this article.

    希望现在您将能够使用匿名函数并了解python中的lambda函数。 感谢您阅读本文。

    翻译自: https://www.journaldev.com/15517/python-lambda

    python lambda

    展开全文
  • Python Lambda

    2019-11-20 15:58:28
    2.普通Python函数和lambda函数之间的共性和细微差别 #1 字节码 #2 Traceback #3 句法 #4 Decorators装饰器 #5 闭包 #6 Evaluation Time评估时间 #7 单元测试unittest 3.避免滥用 4.适合使用 #1 map()、...

    目录

    1.Lambda函数

    2.普通Python函数和lambda函数之间的共性和细微差别

    #1 字节码

    #2 Traceback

    #3 句法

    #4 Decorators装饰器

    #5 闭包

    #6 Evaluation Time评估时间

    #7 单元测试unittest

    3.避免滥用

    4.适合使用

    #1 map()、filter()、functools.reduce(),但现在实际上可以用更优雅的列表推导代替

    #2 sorted( )

    #3 Monkey Patching


    1.Lambda函数

     Lambda表达式组成部分:关键字lambda、参数、body

    >>> lambda x : x**2
    <function <lambda> at 0x0000000002EDF158>
    >>> _(5)  
    25
    #在交互式解释器中,单个下划线(_)绑定到最后计算的表达式。

    匿名函数,可以将lambda函数和参数括住来计算

    >>> (lambda x : x**2)(5)
    25

    l可以分配名称,注意在定义时,函数名是没有括号的

    >>> square = lambda x : x**2
    >>> square(5)
    25

    多个参数时,逗号分隔

    >>> add = lambda x,y : x+y
    >>> add(4,5)
    9

    2.普通Python函数和lambda函数之间的共性和细微差别

    #1 字节码

    #lambda函数
    >>> add = lambda x,y : x+y
    
    #普通Python函数
    >>> def add_common(x,y):
    	return x+y
    
    >>> type(add)
    <class 'function'>
    >>> type(add_common)
    <class 'function'>
    
    >>> import dis
    >>> dis.dis(add) == dis.dis(add_common)
      1           0 LOAD_FAST                0 (x)
                  2 LOAD_FAST                1 (y)
                  4 BINARY_ADD
                  6 RETURN_VALUE
      2           0 LOAD_FAST                0 (x)
                  2 LOAD_FAST                1 (y)
                  4 BINARY_ADD
                  6 RETURN_VALUE
    True

    dis模块通过反汇编来支持CPython 字节码的分析,可见Python对这两个函数解释的字节码是相同的。但是您可能会注意到,命名是不同的:函数名是为使用def定义的函数添加的,而Python lambda函数被视为lambda。

    #2 Traceback

    #1
    >>> zero=lambda x : x/0
    >>> zero(2)
    Traceback (most recent call last):
      File "<pyshell#29>", line 1, in <module>
        zero(2)
      File "<pyshell#28>", line 1, in <lambda>
        zero=lambda x : x/0
    ZeroDivisionError: division by zero
    >>> def zero(x):
    	return x/0
    
    #2
    >>> zero(0)
    Traceback (most recent call last):
      File "<pyshell#33>", line 1, in <module>
        zero(0)
      File "<pyshell#32>", line 2, in zero
        return x/0
    ZeroDivisionError: division by zero

    执行lambda函数时引发的异常的回溯仅将引起异常的函数标识为<lambda>,普通函数会导致类似的错误,回溯到函数名称div_zero

    #3 句法

    lambda函数不能包含任何语句。在lambda函数中,return、pass、assert或raise等语句将引发SyntaxError异常。

    与普通函数相反,Python lambda函数是单个表达式。尽管lambda可以在表达式的主体中使用括号或多行字符串将表达式分布在多行上,但它仍是一个表达式

    #4 Decorators装饰器

    #5 闭包

    #6 Evaluation Time评估时间

    #7 单元测试unittest

    >>> import unittest
    
    >>> add = lambda x,y : x+y
    >>> class Test_add(unittest.TestCase):
    	def test_add(self):
    		self.assertequal(add(10,31),41)
    
    			
    >>> unittest.main()
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.046s
    
    OK
    

    可以像常规函数一样对Python lambda进行测试

    3.避免滥用

    如果在专业Python代码的上下文中编写本文中的几个示例,将被视为滥用:

    它不遵循Python风格指南(PEP 8);它既笨重又难读;这是不必要的聪明,代价是难以阅读。

    4.适合使用

    #1 map()、filter()、functools.reduce(),但现在实际上可以用更优雅的列表推导代替

    #2 sorted( )

    sorted( iterable*key = Nonereverse = False ),key指定一个参数的功能,该参数用于从iterable中的每个元素中提取一个比较键(例如key=str.lower)。默认值为None(直接比较元素)。

    Python中的键函数是以参数键作为命名参数的高阶函数,key可以接收一个lambda函数:

    >>> l=['id1','id30','id7','id12','id80','id78']
    >>> sorted(l,key=lambda k : int(k[2:]))
    ['id1', 'id7', 'id12', 'id30', 'id78', 'id80']

    #3 Monkey Patching

    展开全文
  • 怎么应用Python lambda发布时间:2020-08-25 16:15:09来源:亿速云阅读:80作者:Leah怎么应用Python lambda?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,551
精华内容 9,020
关键字:

pythonlambda

python 订阅