@aeollous

Почему не работает код?

Дело в том что я знаю что код не работает потому что в функции wrapper нужно аргумент number2 по умолчанию поставить None. Объясните пожалуйста почему так
def chain_sum(number):
    result = number
    def wrapper(number2):
        nonlocal result
        if number2 is None:
            return result
        result += number2
        return wrapper
    return wrapper


print(chain_sum(5)())
print(chain_sum(90)(5)())
print(chain_sum(100)(-10)())
  • Вопрос задан
  • 428 просмотров
Пригласить эксперта
Ответы на вопрос 1
sheerluck
@sheerluck
Потому что wrapper постоянно возвращает самого себя.
И единственный способ это остановить -- вызвать wrapper без аргументов, чтобы сработала ветка "if number2 is None". Потому что некрасиво писать chain_sum(90)(5)(None). Красивее всё-таки chain_sum(90)(5)()
Но так его вызвать нельзя: он требует number2. Единственный способ научить wrapper работать как с аргументами так и без аргументов -- это написать def wrapper(number2=None). В этом случае при вызове без аргументов сработает ветка "if number2 is None" и вернётся результат суммирования.

Но лучше так вообще не писать, а почитать про https://python-course.eu/advanced-python/currying-...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы