Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么是key=lambda_Python_Lambda_Key - Fatal编程技术网

Python 什么是key=lambda

Python 什么是key=lambda,python,lambda,key,Python,Lambda,Key,使用一些内置函数时,如sorted、sum。。。 我注意到key=lambda 什么是lambda?它是如何工作的 还有哪些函数使用key=lambda 是否还有其他键值,如,key=?A是一个匿名函数: >>> f = lambda: 'foo' >>> print f() foo 它通常用于sorted()等函数中,这些函数将可调用函数作为参数(通常是key关键字参数)。您也可以提供一个现有函数,而不是lambda,只要它是一个可调用的对象 以中国为例。

使用一些内置函数时,如sorted、sum。。。 我注意到
key=lambda

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

还有哪些函数使用key=lambda

是否还有其他键值,如,
key=?
A是一个匿名函数:

>>> f = lambda: 'foo'
>>> print f()
foo
它通常用于
sorted()
等函数中,这些函数将可调用函数作为参数(通常是
key
关键字参数)。您也可以提供一个现有函数,而不是
lambda
,只要它是一个可调用的对象

以中国为例。它将按排序顺序返回给定的iterable:

>>> sorted(['Some', 'words', 'sort', 'differently'])
['Some', 'differently', 'sort', 'words']
但这会将大写单词排在小写单词之前。使用
关键字可以更改每个条目,使其排序不同。我们可以在排序之前将所有单词小写,例如:

>>> def lowercased(word): return word.lower()
...
>>> lowercased('Some')
'some'
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lowercased)
['differently', 'Some', 'sort', 'words']
我们必须为此创建一个单独的函数,不能将
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
 >>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower())
['differently', 'Some', 'sort', 'words']
lambda仅限于一个表达式,其结果是返回值


Python库中有很多位置,包括内置函数,它们将可调用作为关键字或位置参数。这里有太多的名字,它们通常扮演不同的角色。

Lambda可以是任何函数。如果你有一个函数

def compare_person(a):
         return a.age
您可以对人员列表(每个人都有年龄属性)进行如下排序:

sorted(personArray, key=compare_person)
这样,列表将按年龄升序排序

该参数称为lambda,因为python有一个漂亮的lambda关键字用于动态定义此类函数。除了定义函数compare_person并将其传递给sorted之外,您还可以编写:

sorted(personArray, key=lambda a: a.age)
它做同样的事情

 >>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower())
实际上,上述代码可以是:

>>> sorted(['Some','words','sort','differently'],key=str.lower)

根据,key指定一个参数的函数,该参数用于从每个列表元素中提取比较键:key=str.lower。默认值为None(直接比较元素)。

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

>>> # 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
>>> 
基本上用于定义匿名函数,该函数可以/不能接受参数,并返回数据的值/表达式。让我们看一个示例

>>> # 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
>>> 
我想使用sorted()函数对其进行排序,让我们看看会发生什么

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
>>> sorted(nums)
[1, 3, 4, '-1', '-10', '2', '5', '8']
>>>
它没有给我我所期望的,正如我所希望的如下所示

['-10', '-1', 1, '2', 3, 4, '5', '8']
这意味着我们需要一些策略来实现这一点(以便sorted可以将字符串项视为int)。这就是为什么要使用key关键字参数。请看下面这个

>>> nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
>>> sorted(nums, key=int)
['-10', '-1', 1, '2', 3, 4, '5', '8']
>>> 
让我们使用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']
>>>
您可以定义自己的函数(可调用),并将其作为键的值提供

>>> # 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
>>> 
亲爱的编程人员,我已经为您编写了以下代码,请尝试理解它并评论您的解释。我很高兴看到你的解释(很简单)


I希望它将非常有用

在本例中,键是一个关键字参数,与
lambda
无关。请参见以下内容:
>>> # 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
>>>