Не удержался и решил показать пример как можно записать код из поста про if-else еще короче, буквально в одну строку!
value = any((get_new_value(i) for i in array)) or get_default()
Тут стоит знать две особенности функций any/all и операторов or/and.
1.Эти операторы не возвращают тип bool
Они только делают преобразование данных в этот тип на момент сравнения.
2. Как именно устроена логика? В какой момент сработает return?
any() - возвращает первый элемент, который преобразовался в True или последний элемент
all() - возвращает первый элемент, который преобразовался в False или последний элемент
or и and делают аналогично, только для двух операндов
Но все они возвращают именно исходное значение, а не bool!
Ну а наличие генератора позволяет не выполнять лишних операций, только до момента нахождения нужного значения.
Если значение так и не найдено, оператор or запустит функцию get_default().
PS. Несмотря на возможность записать таким образом, я призываю всегда отдавать предпочтение понятности кода, а не краткости. Если про понятность не понятно, делаемimport thisи читаем, читаем, читаем...
#tricks