Замыкания в языке Python

начал разбираться в теме замыкания в языке Python, и выполнил такое вот задание: используя замыкания функций, объявите внутреннюю функцию, которая преобразует строку из списка целых чисел, записанных через пробел, либо в список, либо в кортеж. Тип коллекции определяется параметром type внешней функции. Если type = 'list' , то используется список, иначе – кортеж. Далее, на вход программы поступает две строки: первая – это значение для параметра type; вторая – список целых чисел, записанных через пробел. С помощью реализованного замыкания преобразовать эту строку в соответствующую коллекцию. Результат работы замыкания выведите на экран. Сам код:

def func(type: str):
    def inner(value):
        gen = (e for e in value.split())
        if type == 'list':
            return list(gen)
        return tuple(gen)

    return inner


if __name__ == '__main__':
    print(func('list')('1 2 3 4'))
    print(func('tuple')('1 2 3 4 5'))

Хотелось бы узнать, правильно ли понял тему и есть ли ошибки в коде. Спасибо.


Ответы (1 шт):

Автор решения: SergFSM

ваш код работает правильно, особо добавить нечего, просто предложу немного другой вариант исполнения:

def func(type_: str):
    t = list if type_=='list' else tuple
    def inner(value):
        return t(value.split())
    return inner

to_list = func('list')
to_tuple = func('tuple')
to_set = func('set')  # !

print(to_list('1 2 3 4'), to_tuple('5 6 7 8'), to_set('9 10 11 11'), sep='\n')

результат:

['1', '2', '3', '4']
('5', '6', '7', '8')
('9', '10', '11', '11')
→ Ссылка