Избыток глобальных переменных приводит к росту вероятности того, что одна и та же глобальная переменная может быть одновременно использована в разных местах программы для совершенно разных целей. Локальные переменные минимизируют ошибки этого и только этого типа.
Но, одновременно, локальные переменные становятся источником ошибок другого типа: когда начинается путаница в локальных переменных, имеющих совпадающие имена, но разные области видимости в границах одной подпрограммы.
Да, любую задачу можно решить без этого. Более того, сам Гвидо ван Россум был категорически против добавления := в Python. Но современным кодерам хочется рюшечек, сокращающих объём кода.
Задача: ввод 20 чисел. Из чисел в диапазоне 10 - 100, кратных 3, составить список.
Можно написать так:
t = [] for _ in range(20): v = int(input()) if 10 <= v <= 100 and v % 3 == 0: t.append(v)
А можно написать так:
t = [v for _ in range(20) if 10 <= (v := int(input())) <= 100 and v % 3 == 0]