Звёздочка перед генератором распаковывает значения в генераторе. Без неё вы получаете просто генератор, с которым можно в дальнейшем работать через periodicals или циклами.
arr = ['яблоко', '1', 'мандарин', '12', 'апельсин']
print(*(i for i in arr if i.isdigit()), sep="") ###112
print([i for i in arr if i.isdigit()]) ###['1', '12]
generator = (i for i in arr if i.isdigit())
print(next(generator))
#1
Иначе говоря, генераторы — это специальная конструкция, можно вместо них использовать скобки, тогда получится список и дополнительных махинаций в виде звёздочки или next()
они не требуют.
Генераторы же полезны когда в функцию необходимо передать несколько параметров, можно указать их в списке и передать через звёздочку не расписывая каждый. print
как раз та самая функция, которая может принимать неограниченное число параметров на вход.