Вы можете использовать стандартные значения для аргументов в случае снабжения их аннотациями — аннотация (и ее символ
:
) появляется перед стандартным значением (и символом =
). В показанном ниже коде а: 'spam' = 4
означает, что аргумент а имеет стандартное значение 4 и аннотирован строкой 'spam'
:>>> def func(a: 'spam' = 4, b: (1, 10) = 5, c: float = 6) -> int:
>>> return a + b + c
>>> func (1, 2, 3)
... 6
>>> func() # 4 + 5 + 6 (все стандартные значения)
... 15
>>> func(1, с=10) # 1+5 + 10 (ключевые аргументы нормально работают)
... 16
>>> func.__annotations__
{'с': <class 'float;>, 'b': (1, 10), 'a': 'spam', 'return': class 'int'>}
Общая форма лямбда-функций выглядит как ключевое слово
Как и в случае
lambda
, за которым следует один или больше аргументов (очень похоже на список аргументов, заключенный в круглые скобки в заголовке def
) и далее выражение после двоеточия:lambda аргумент!, аргумент2, . . . аргументы : выражение , использующее аргументы
Как и в случае
def
, для аргументов lambda
можно указывать стандартные значения:x = (lambda a="fee", b="fie", c="foe": a + b + c)
print(x("wee")) # weefiefoe
Вы можете использовать словари и другие структуры данных в Python для построения более универсальных разновидностей таблиц действий. Вот пример:
Когда Python создает временный словарь, каждое вложенное выражение lambda генерирует и оставляет после себя функцию, подлежащую вызову в будущем. Индексация по ключу извлекает одну из функций, а круглые скобки приводят к вызову извлеченной функции. При такой реализации словарь становится более универсальным инструментом для множественного ветвления, нежели оператор
key = 'got'
{'already': (lambda: 2 + 2), 'got': (lambda: 2 * 4), 'one': (lambda: 2 ** 6)}[key]()
Когда Python создает временный словарь, каждое вложенное выражение lambda генерирует и оставляет после себя функцию, подлежащую вызову в будущем. Индексация по ключу извлекает одну из функций, а круглые скобки приводят к вызову извлеченной функции. При такой реализации словарь становится более универсальным инструментом для множественного ветвления, нежели оператор
if
.— Функция
—
1.
2.
3.
Затем, когда мы оборачиваем это в
pow(x, y)
возвращает x, возведённое в степень y.—
map(function, iterable1, iterable2)
применяет заданную функцию (в данном случае pow()
) к элементам двух (или более) итерируемых объектов (в данном случае списков [1, 2, 3]
и [2, 3, 4]
).map(pow, [1, 2, 3], [2, 3, 4])
выполнит следующее:1.
pow(1, 2)
возвращает 1^2 = 12.
pow(2, 3)
возвращает 2^3 = 83.
pow(3, 4)
возвращает 3^4 = 81.Затем, когда мы оборачиваем это в
list()
, то получаем полный список:>>> list(map(pow, [1, 2, 3], [2, 3, 4])) # 1 ** 2, 2 ** 3, 3 ** 4
... [1, 8, 81]
functools.reduce(функция, итерируемый_объект, [исходное_значение, ]/)
reduce()
применяет функцию
к итерируемому_объекту
, и возвращает одиночный результат. Она разрешает также передавать необязательный третий аргумент исходное_значение
, который фактически помещается перед элементами последовательности и служит начальным значением, а также стандартным результатом, когда последовательность пуста.from functools import reduce
# Суммируем элементы списка
reduce((lambda x, у: х + у) , [1, 2, 3, 4]) # 10
но
from functools import reduce
reduce((lambda x, у: х + у) , [1, 2, 3, 4], 1) # 11
Какой из методов pandas удалит записи с пропусками? #размяться
Anonymous Quiz
73%
pd.dropna()
10%
pd.fillna()
7%
pd.isna()
10%
pd.notna()
Что выведет код?
Anonymous Quiz
62%
[115, 112, 97, 109]
6%
115, 112, 97, 109
18%
['a', 'm', 'p', 's']
15%
Error
Встроенная функция
одиночного символа:
Ниже приведен пример верного синтаксиса:
ord()
в Python возвращает целочисленную кодовую точкуодиночного символа:
ord('s') # 115
mар()
передает каждый элемент итерируемого объекта некой функции и собирает все результаты. Однако при передаче функции в качестве аргумента map()
скобки опускаются, потому код выше вызовет ошибку:Ниже приведен пример верного синтаксиса:
counters = [1, 2, 3, 4]
def inc(x): return х + 10 # Прибавим каждому элементу 10
list(map(inc, counters)) # [11, 12, 13, 14]