在使用一些内置的功能,如排序,总和...... 我注意到的key=lambda
什么是关键=拉姆达
什么是拉姆达的使用情况如何?它是如何工作的?
还有哪些函数使用key = lambda?
是否有像任何其他键值,key=?
在使用一些内置的功能,如排序,总和...... 我注意到的key=lambda
什么是关键=拉姆达
什么是拉姆达的使用情况如何?它是如何工作的?
还有哪些函数使用key = lambda?
是否有像任何其他键值,key=?
甲lambda
是匿名函数:
>>> f = lambda: 'foo'
>>> print f()
foo
它在功能,例如sorted()
称取一个可调用作为参数经常使用(通常是key
关键字参数)。只要它是可调用对象,您也可以在其中提供现有功能而不是lambda
。以sorted()
function为例。它会按照排序顺序返回给定的迭代:
>>> sorted(['Some', 'words', 'sort', 'differently'])
['Some', 'differently', 'sort', 'words']
但在小写字母之前排序大写字母。使用key
关键字,您可以更改每个条目,以便按不同方式排序。我们可以排序之前小写所有的单词,例如:
>>> 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
一个lambda
另一方面,可以直接指定,内联在sorted()
表达式中:
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower())
['differently', 'Some', 'sort', 'words']
兰姆达斯仅限于一个表达式,其结果是返回值。
在Python库中有很多地方可以调用关键字或位置参数,包括内置函数。这里有太多的名字,而且他们经常扮演不同的角色。
Lambda可以是任何函数。所以,如果你有一个功能
def compare_person(a):
return a.age
你可以排序的人的名单像这样(每个具有年龄属性):
sorted(personArray, key=compare_person)
这样,名单将由年龄排序升序。
该参数被称为lambda,因为python有一个漂亮的lambda关键字用于定义这样的函数。你可以写下:
sorted(personArray, key=lambda a: a.age)
它做同样的事情,而不是定义一个函数compare_person并将其传递给排序。
>>> sorted(['Some', 'words', 'sort', 'differently'], key=lambda word: word.lower())
实际上,上述代码可以是:
>>> sorted(['Some','words','sort','differently'],key=str.lower)
根据https://docs.python.org/2/library/functions.html?highlight=sorted#sorted,键指定一个参数的函数被用于提取从每个列表元素的比较关键:键= str.lower 。默认值是None(直接比较元素)。
在Python,拉姆达是用来定义匿名函数(没有名字的函数)的关键词,这就是为什么他们被称为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
>>>
现在让我给你的第二问题的回答。 1st的答案也很棒。这是我用自己的方式来解释另一个例子。
假设我们有一个项目列表(整数和字符串与数字内容)如下,
nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]
,我想用排序()函数对它进行排序,让我们看看会发生。
>>> 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']
这意味着我们需要一些战略(这样来分类可以把我们的字符串项作为一个整数)来实现这一点。这就是为什么使用键关键字参数。请看下面的一个。
>>> 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']
>>>
值可以定义自己的函数(调用),并提供它的关键值。
亲爱的编程人员,我已经写了,你下面的代码,只要尝试了解并评论你的解释。我很乐意看到你的解释(很简单)。
>>> 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]
>>>
我希望这将是有用。
本例中的'key'是一个关键字参数,与'lambda'无关。 – l4mpi
看到这个:http://stackoverflow.com/questions/8966538/syntax-behind-sortedkey-lambda – sachinjain024