← Все вопросы

NameError при использовании переменной из другой функции — почему не видит?

Задан 8 месяцев назад346 просмотров1 ответ
5

У меня переменная создаётся в одной функции, а в другой питон говорит NameError: name 'total' is not defined:

def calc():
    total = 100

def show():
    print(total)

calc()
show()

Я же объявил total, почему show() его не видит?

1 ответ

10
✓ Принятый ответ — помог автору

Переменная total живёт только внутри функции calc, где её создали — это называется локальная область видимости. Снаружи и в других функциях её просто не существует, поэтому show() ловит NameError.

Правильный путь — не делиться переменными через "воздух", а возвращать и передавать значение:

def calc():
    return 100

def show(total):
    print(total)

show(calc())

Так функция calc отдаёт результат, а show его принимает аргументом. Это надёжнее любых глобальных переменных.

Ваш ответ

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