Что является ключевым = лямбда

При использовании некоторых встроенных функций, таких как сортировка, суммирование... Я заметил использование key=lambda

Что такое лямбда? Как это работает?

В каких других функциях используется key = lambda?

Есть ли другие ключевые значения, такие как key=?

Ответ 1

lambda - это анонимная функция:

>>> f = lambda: 'foo'
>>> print f()
foo

Он часто используется в функциях, таких как sorted() которые принимают вызываемый элемент в качестве параметра (часто это key параметр). Вы также можете предоставить существующую функцию вместо lambda, если это вызываемый объект.

Возьмите функцию sorted() в качестве примера. Он вернет данную итерацию в отсортированном порядке:

>>> 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 есть множество мест, в том числе встроенных функций, которые принимают в качестве ключевого слова или позиционного аргумента вызываемый объект. Здесь слишком много имен, и они часто играют другую роль.

Ответ 2

Lambda может быть любой функцией. Поэтому, если у вас есть функция

def compare_person(a):
         return a.age

Вы можете отсортировать список Person (каждый из которых имеет возрастный атрибут) следующим образом:

sorted(personArray, key=compare_person)

Таким образом, список будет отсортирован по возрасту в порядке возрастания.

Параметр называется lambda, потому что у python есть отличные лямбда-ключевые слова для определения таких функций "на лету". Вместо того, чтобы определять функцию compare_person и передавать ее для сортировки, вы также можете написать:

sorted(personArray, key=lambda a: a.age)

который делает то же самое.

Ответ 3

В 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 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 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
>>> 

Теперь позвольте мне ответить на ваш вопрос 2. Ответ 1st тоже велик. Это мой собственный способ объяснить другим примером.

Предположим, что у нас есть список элементов (целых и строк с числовым содержимым) следующим образом:

nums = ["2", 1, 3, 4, "5", "8", "-1", "-10"]

и я хочу отсортировать его с помощью функции 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']

Это означает, что нам нужна стратегия (чтобы отсортированные могли обрабатывать наши строковые элементы как ints) для достижения этого. Вот почему используется аргумент ключевого слова key. Посмотрите ниже.

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

Использует лямбда-функцию в качестве значения

>>> 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']
>>>

Вы можете определить свою собственную функцию (callable) и указать ее как значение .

Уважаемые программисты, я написал для вас приведенный ниже код, просто попробуйте понять и комментарий ваши объяснения. Я был бы рад увидеть ваше объяснение (это просто).

>>> 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]
>>>

Я надеюсь он будет полезным.

Ответ 4

 >>> 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, ключ указывает функцию одного аргумента, которая используется для извлечения ключа сравнения из каждого элемента списка: key = str.lower. Значение по умолчанию - None (сравнить элементы напрямую).