Лямбда-функции
Порой нужно передать функцию в качестве аргумента, либо сделать короткую (но сложную) операцию большое количество раз. В таком случае можно определить обычную функцию через def, а можно использовать лямбда-функцию.
У лямбда-функций есть несколько преимуществ, во-первых их можно передавать мгновенно (переменная не нужна), во-вторых, иногда они способны улучшить читаемость кода. Но злоупотреблять ими не стоит.
Лямбда-функции отлично сочетаются, например, с map.
#lambda
Порой нужно передать функцию в качестве аргумента, либо сделать короткую (но сложную) операцию большое количество раз. В таком случае можно определить обычную функцию через def, а можно использовать лямбда-функцию.
У лямбда-функций есть несколько преимуществ, во-первых их можно передавать мгновенно (переменная не нужна), во-вторых, иногда они способны улучшить читаемость кода. Но злоупотреблять ими не стоит.
Лямбда-функции отлично сочетаются, например, с map.
#lambda
Списковые включения (list comprehensions)
Допустим, есть список, который необходимо превратить в список квадратов элементов. Можно, например, воспользоваться функцией map в сочетании с lambda.
Этот код довольно короткий, но он все еще плохо читаем. К тому же мы вынуждены дополнительно определить лямбда-функцию.
К счастью есть более красивый способ.
Даже человек без знания python легко определит что делает этот код.
Также с помощью списковых включений можно фильтровать список.
Да, это все можно было сделать с помощью цикла for. Однако, подобный подход совсем не гарантирует четкий и лаконичный код.
#list
Допустим, есть список, который необходимо превратить в список квадратов элементов. Можно, например, воспользоваться функцией map в сочетании с lambda.
numbers = [1,2,3,4,5]
squares = map(lambda item: item**2, numbers)
Этот код довольно короткий, но он все еще плохо читаем. К тому же мы вынуждены дополнительно определить лямбда-функцию.
К счастью есть более красивый способ.
numbers = [1,2,3,4,5]
squares = [number*number for number in numbers]
Даже человек без знания python легко определит что делает этот код.
Также с помощью списковых включений можно фильтровать список.
numbers = [1,2,3,4,5]
evens = [number for number in numbers if number%2==0]
Да, это все можно было сделать с помощью цикла for. Однако, подобный подход совсем не гарантирует четкий и лаконичный код.
#list
Цепочки сравнений (chaining comparison)
Python позволяет составлять произвольные цепочки сравнений, читаются они слева направо, a<b<c разбивается на два выражения: a<b and b<c. Обратите внимание, если a<b возвращает False, b<c уже не оценивается.
https://en.wikipedia.org/wiki/Short-circuit_evaluation
Python позволяет составлять произвольные цепочки сравнений, читаются они слева направо, a<b<c разбивается на два выражения: a<b and b<c. Обратите внимание, если a<b возвращает False, b<c уже не оценивается.
https://en.wikipedia.org/wiki/Short-circuit_evaluation
Параметры в iter
Обычно built-in функция iter() возвращает итератор от переданной последовательности.
Однако, можно передать два параметра. В таком случае, первый параметр должен быть callable-объектом, а второй — результатом вызова первого объекта, на котором нужно остановить итерирование.
Как пример, построчное считывание из файла до первого вхождения пустой строчки.
#iterator
Обычно built-in функция iter() возвращает итератор от переданной последовательности.
Однако, можно передать два параметра. В таком случае, первый параметр должен быть callable-объектом, а второй — результатом вызова первого объекта, на котором нужно остановить итерирование.
Как пример, построчное считывание из файла до первого вхождения пустой строчки.
#iterator