Заметки по Python (19): анонимные функции

Python Технологии Nuggets призывают к публикации
Заметки по Python (19): анонимные функции

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Привет всем, яодна чаша в неделю, передняя часть, которая не хочет быть пьяной (завернутой). Если написанной статье посчастливилось получить вашу благосклонность, мне очень повезло~

анонимная функция

В python, помимо функций, определяемых def, есть также анонимная функция, определяемая lambda. Такую функцию можно использовать везде, где можно использовать обычную функцию, но она строго ограничена одним выражением, когда оно определено. Семантически это просто синтаксический сахар для обычных функций.

Если нам нужно определить особенно простую функцию, например

def add(a, b):
    s = a + b
    return s

Это проблема, как такой элегантный Python может иметь такой уродливый код, есть ли способ упростить его до 1 строки кода? Должен быть способ упростить такой элегантный Python! это будет использоватьанонимная функция.

использовать ** в питонеlambda**ключевое слово для создания анонимных функций.

формат синтаксиса

lambda [参数1 [,参数2,..参数n]]:表达式

Список параметров лямбда: возвращаемая переменная [выражение]

Поскольку лямбда возвращает объект функции (строит объект функции), вам необходимо определить переменную для получения

Пример кода выглядит следующим образом:

news_add = lambda a, b: a + b
# 上面的那个等于
def news_add_old(a, b):
    return a + b

x = news_add_old(5, 10)
y = news_add(5, 10)  # 调用匿名函数
print(x, y)  # 15 15

Использование со встроенными функциями

list1 = [{"a": 10, "b": 20}, {"a": 20, "b": 20}, {"a": 50, "b": 20}, {"a": 6, "b": 20}, {"a": 9, "b": 20}]


# 那个列表中的a最大
max_value = max(list1, key=lambda x: x["a"])
print(max_value)

# 如果用普通的函数写就多了几行
def func(di):
    return di["a"]
max_value = max(list1, key=func)  # 这里不能加()不然就表示调用了
print(max_value)

Принимать анонимные функции в качестве параметров

def func(a, b, fun):
    s = fun(a, b)
    return s

z = func(5, 10, lambda a, b: a + b)
print(z)  # 15

Lambda может сэкономить процесс определения функций, сделать код более упорядоченным и не требует рассмотрения проблемы именования, но лямбда не рекомендуется в спецификации PEP8.