Что является ключевым = лямбда
При использовании некоторых встроенных функций, таких как сортировка, суммирование...
Я заметил использование 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 (сравнить элементы напрямую).