Синтаксический сахар в Python

Синтаксический сахар в Python

Синтаксический сахар в Python — это маленькая суперспособность языка, позволяющая сокращать код некоторых циклов и условий буквально до одной строки! Согласитесь, звучит приятно? Наверняка, столь вкусное название синтаксическому сахару было дано за способность вызывать у программистов небольшой дофаминовый отклик! ;-). Ладно, пошутили, и хватит! Перейдем от слов к делу, то есть к наглядным примерам, демонстрирующим разные виды синтаксического сахара:

Условное выражение, как синтаксический сахар

(или заменяем конструкцию if-else условным выражением в одну строку!)

С помощью условного выражения можно записать привычную конструкцию if-else в одну строку. Рассмотрим примеры, в которых такая замена будет актуальна:

Пример №1

Сначала посмотрим на привычную конструкцию if-else:

if x > 0:
    y = x
else:
    y = 0

Эта конструкция проверяет, положительно ли значение переменной x. Если это так, то переменной у присваивается значение x, в противном случае y получает значение 0.

А теперь перепишем исходный код с помощью условного выражения в одну строку:

y = (x if x > 0 else 0) 

Как вам такой синтаксический сахар? Удобно, не правда ли?

Пример №2

Условные выражения можно использовать в функциях после оператора return. Посмотрите, как с помощью синтаксического сахара можно сократить функцию нахождения факториала:

Исходная функция вычисления факториала:

def factorial(x):
    if(x == 0):
        return 1
    else:
        return x * factorial(x-1)

Функция вычисления факториала, написанная с помощью условного выражения:

def factorial(x):
    return 1 if x==0 else x * factorial(x-1)

Генератор списков, как синтаксический сахар

(или используем генератор для создания и фильтрации списка!)

Генератор списков также относится к синтаксическому сахару. Благодаря генератору в ряде случаев можно обойтись без привычной функции append() при формировании списка. На представленном ниже примере создадим последовательность квадратов целых чисел от 0 до 5 стандартным способом, после чего рассмотрим иной, однострочный вариант — с помощью генератора списков.

Создаем список с помощью генератора!

Стандартный вариант создания списка:

squares = []
for i in range(6):
    squares.append(i**2)
print(squares)
 Вывод на экран: [0, 1, 4, 9, 16, 25] 

Формируем список с помощью генератора:

squares = [i**2 for i in range(6)]
print(squares)
Вывод на экран: [0, 1, 4, 9, 16, 25] 

В данном случае использование генератора позволило сократить код создания списка до одной строки, не ухудшив при этом читаемость кода. Однозначно, годный вариант!

Используем генератор списка для фильтрации!

Генератор также можно использовать для фильтрации списка. Например, показанная ниже функция выбирает только положительные элементы и сохраняет их в новом списке:

if x > 0:
    y = x
else:
    y = 0

А теперь реализуем аналогичный функционал с помощью генератора списка:

y = (x if x > 0 else 0) 

Осторожно! Синтаксический сахар вызывает привыкание! Поэтому использовать в коде его рекомендуется строго по-назначению: для замены коротких условий либо циклов, не нарушая при этом читаемость кода!

Выражение-генератор, как синтаксический сахар

(или размещаем цикл for в одной строке!)

В отличие от генераторов списков, выражения-генераторы заключены не в квадратные, а в круглые скобки. На выходе мы получим объект генератора, который вычисляет значения не сразу, а по запросу. Для перебора значений объекта используется встроенная функция next():

gen_obj = (i*5 for i in range(2, 7))

print(gen_obj)
print(next(gen_obj))

В резульате получим:

<generator object <genexpr> at 0x7f1cf04a3a50>
10 

У нас появился Telegram-канал для изучающих Python! Присоединяйтесь: вместе «питонить» веселее! 😉 Ссылка на канал: «Кодим на Python!»

Добавить комментарий