什么是关键= lambda

Thi*_*iru 44 python lambda key

使用一些内置函数,如sorted,sum ...我注意到了它的用法 key=lambda

什么是lambda?它是如何工作的?

还有哪些函数使用key = lambda?

还有其他关键值,比如 key=?

Mar*_*ers 74

A lambda是匿名函数:

>>> f = lambda: 'foo'
>>> print f()
foo
Run Code Online (Sandbox Code Playgroud)

它通常用于诸如sorted()将可调用作为参数(通常是key关键字参数)的函数中.lambda只要它是可调用对象,您就可以提供现有函数而不是它.

sorted()功能,例如,它将按排序顺序返回给定的iterable:

>>> sorted(['Some', 'words', 'sort', 'differently'])
['Some', 'differently', 'sort', 'words']
Run Code Online (Sandbox Code Playgroud)

但是在小写的单词之前对大写单词进行排序.使用key关键字,您可以更改每个条目,以便对它们进行不同的排序.我们可以在排序之前小写所有单词,例如:

>>> def lowercased(word): return word.lower()
...
>>> lowercased('Some')
'some'
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lowercased)
['differently', 'Some', 'sort', 'words']
Run Code Online (Sandbox Code Playgroud)

我们必须为此创建一个单独的函数,我们无法将该def lowercased()行内联到sorted()表达式中:

>>> sorted(['Some', 'words', 'sort', 'differently'], key=def lowercased(word): return word.lower())
  File "<stdin>", line 1
    sorted(['Some', 'words', 'sort', 'differently'], key=def lowercased(word): return word.lower())
                                                           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

lambda在另一方面,可以直接指定,内嵌在sorted()表达式:

 >>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower())
['differently', 'Some', 'sort', 'words']
Run Code Online (Sandbox Code Playgroud)

Lambdas仅限于一个表达式,其结果是返回值.

Python库中有许多地方,包括内置函数,它们可以作为关键字或位置参数进行调用.这里有太多的名字,他们经常扮演不同的角色.


cem*_*r93 9

Lambda可以是任何功能.所以,如果你有一个功能

def compare_person(a):
         return a.age
Run Code Online (Sandbox Code Playgroud)

你可以对Person的列表(每个都有一个age属性)进行排序,如下所示:

sorted(personArray, key=compare_person)
Run Code Online (Sandbox Code Playgroud)

这样,列表将按年龄按升序排序.

该参数称为lambda,因为python有一个漂亮的lambda关键字用于动态定义这些函数.您可以编写:而不是定义函数compare_person并将其传递给sorted.

sorted(personArray, key=lambda a: a.age)
Run Code Online (Sandbox Code Playgroud)

它做同样的事情.


hyg*_*ull 9

在Python中,lambda是一个用于定义匿名函数(没有名称的函数)的关键字,这就是为什么它们被称为lambda函数.

基本上它用于定义匿名函数,这些函数可以/不能接受参数并返回 data / expression的值.我们来看一个例子吧.

>>> # Defining a lambda function that takes 2 parameters(as integer) and returns their sum
... 
>>> lambda num1, num2: num1 + num2 
<function <lambda> at 0x1004b5de8>
>>> 
>>> # Let's store the returned value in variable & call it(1st way to call)
... 
>>> addition = lambda num1, num2: num1 + num2
>>> addition(62, 5)
67
>>> addition(1700, 29)
1729
>>> 
>>> # Let's call it in other way(2nd way to call, one line call )
... 
>>> (lambda num1, num2: num1 + num2)(120, 1)
121
>>> (lambda num1, num2: num1 + num2)(-68, 2)
-66
>>> (lambda num1, num2: num1 + num2)(-68, 2**3)
-60
>>> 
Run Code Online (Sandbox Code Playgroud)

现在让我回答你的第二个问题.第一个答案也很棒.这是我用另一个例子来解释的方法.

假设我们有一个项目列表(整数带有数字内容的字符串),如下所示,

nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
Run Code Online (Sandbox Code Playgroud)

我想用sorted()函数对它进行排序,让我们看看会发生什么.

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
>>> sorted(nums)
[1, 3, 4, '-1', '-10', '2', '5', '8']
>>>
Run Code Online (Sandbox Code Playgroud)

它并没有给我什么,我希望,我希望像下面,

['-10', '-1', 1, '2', 3, 4, '5', '8']
Run Code Online (Sandbox Code Playgroud)

这意味着我们需要一些策略(以便排序可以将我们的字符串项视为一个int)来实现这一目标.这就是为什么关键是使用关键字参数.请看下面的一个.

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
>>> sorted(nums, key=int)
['-10', '-1', 1, '2', 3, 4, '5', '8']
>>> 
Run Code Online (Sandbox Code Playgroud)

让我们使用lambda函数作为的值

>>> names = ["Rishikesh", "aman", "Ajay", "Hemkesh", "sandeep", "Darshan", "Virendra", "Shwetabh"]
>>> names2 = sorted(names)
>>> names2
['Ajay', 'Darshan', 'Hemkesh', 'Rishikesh', 'Shwetabh', 'Virendra', 'aman', 'sandeep']
>>> # But I don't want this o/p(here our intention is to treat 'a' same as 'A')
...
>>> names3 = sorted(names, key=lambda name:name.lower())
>>> names3
['Ajay', 'aman', 'Darshan', 'Hemkesh', 'Rishikesh', 'sandeep', 'Shwetabh', 'Virendra']
>>>
Run Code Online (Sandbox Code Playgroud)

您可以定义自己的函数(可调用)并将其作为键的值提供.

亲爱的程序员,我已经为您编写了以下代码,只是尝试理解它并评论您的解释.我很高兴看到你的解释(这很简单).

>>> def validator(item):
...     try:
...         return int(item)
...     except:
...         return 0
... 
>>> sorted(['gurmit', "0", 5, 2, 1, "front", -2, "great"], key=validator)
[-2, 'gurmit', '0', 'front', 'great', 1, 2, 5]
>>>
Run Code Online (Sandbox Code Playgroud)

希望它会有.