Введение
Анонимные функции в Python называются lambda функциями. Это способ создать функции без имени. Они полезны для создания коротких функций, которые используются только один раз.
This tutorial is from open-source community. Access the source code
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
Анонимные функции в Python называются lambda функциями. Это способ создать функции без имени. Они полезны для создания коротких функций, которые используются только один раз.
Списки можно сортировать на месте. С использованием метода sort
.
s = [10,1,7,3]
s.sort() ## s = [1,3,7,10]
Можно сортировать в обратном порядке.
s = [10,1,7,3]
s.sort(reverse=True) ## s = [10,7,3,1]
Похоже, все достаточно просто. Однако, как отсортировать список словарей?
[{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}]
По какому критерию?
Можно управлять сортировкой, используя функцию-ключ. Функция-ключ — это функция, которая получает словарь и возвращает значение, по которому будет производиться сортировка.
portfolio = [
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'MSFT', 'price': 65.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100}
]
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
Вот результат.
## Проверить, как словари отсортированы по ключу `name`
[
{'name': 'AA', 'price': 32.2,'shares': 100},
{'name': 'CAT', 'price': 83.44,'shares': 150},
{'name': 'GE', 'price': 40.37,'shares': 95},
{'name': 'IBM', 'price': 91.1,'shares': 50},
{'name': 'IBM', 'price': 70.44,'shares': 100},
{'name': 'MSFT', 'price': 51.23,'shares': 200},
{'name': 'MSFT', 'price': 65.1,'shares': 50}
]
В вышеприведенном примере функция-ключ является примером функции обратного вызова. Метод sort()
"обратно вызывает" функцию, которую вы предоставляете. Функции обратного вызова часто представляют собой короткие однострочные функции, которые используются только для этой одной операции. Программисты часто просят предоставить способ сокращения для указания этой дополнительной обработки.
Используйте lambda вместо создания функции. В нашем предыдущем примере сортировки.
portfolio.sort(key=lambda s: s['name'])
Это создает безымянную функцию, которая вычисляет единственное выражение. Код выше гораздо короче, чем исходный код.
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
## по сравнению с lambda
portfolio.sort(key=lambda s: s['name'])
if
, while
и т.д.sort()
.Прочитайте некоторые данные портфеля акций и преобразуйте их в список:
>>> import report
>>> portfolio = list(report.read_portfolio('portfolio.csv'))
>>> for s in portfolio:
print(s)
Stock('AA', 100, 32.2)
Stock('IBM', 50, 91.1)
Stock('CAT', 150, 83.44)
Stock('MSFT', 200, 51.23)
Stock('GE', 95, 40.37)
Stock('MSFT', 50, 65.1)
Stock('IBM', 100, 70.44)
>>>
Попробуйте следующие инструкции, которые сортируют данные портфеля по алфавиту по названию акции.
>>> def stock_name(s):
return s.name
>>> portfolio.sort(key=stock_name)
>>> for s in portfolio:
print(s)
... inspect the result...
>>>
В этом разделе функция stock_name()
извлекает название акции из одной записи в списке portfolio
. sort()
использует результат этой функции для сравнения.
Попробуйте отсортировать портфель по количеству акций с использованием выражения lambda
:
>>> portfolio.sort(key=lambda s: s.shares)
>>> for s in portfolio:
print(s)
... inspect the result...
>>>
Попробуйте отсортировать портфель по цене каждой акции
>>> portfolio.sort(key=lambda s: s.price)
>>> for s in portfolio:
print(s)
... inspect the result...
>>>
Примечание: lambda
представляет собой полезный способ сокращения, так как позволяет определить функцию специальной обработки непосредственно в вызове sort()
, в отличие от того, чтобы сначала определить отдельную функцию.
Поздравляем! Вы завершили лабораторную работу по анонимным функциям и lambda. Вы можете практиковаться в других лабораторных работах в LabEx, чтобы улучшить свои навыки.