Я считаю, что Python использует область действия для локальных переменных. То есть, в любой данной функции, если вы присваиваете значение локальной переменной, оно будет доступно с этого момента внутри этой функции, пока не вернется. Следовательно, поскольку обе ветви вашего кода гарантированно присваиваются a
, нет необходимости изначально присваивать None
a
.
Обратите внимание, что когда вы также можете получить доступ к переменным, объявленным во внешних функциях - другими словами, в Python есть замыкания.
def adder(first):
def add(second):
return first + second
return add
Это определяет функцию под названием сумматор. При вызове с аргументом first
он возвращает функцию, которая добавляет любой аргумент, который он получает, к first
и возвращает это значение. Например:
add_two = adder(2)
add_three = adder(3)
add_two(4) # = 6
add_three(4) # = 7
Однако, хотя вы можете прочитать значение из внешней функции, вы не можете его изменить (в отличие от многих других языков). Например, представьте, что вы пытаетесь реализовать аккумулятор. Вы можете написать код так:
def accumulator():
total = 0
def add(number):
total += number
return total
return add
К сожалению, попытка использовать этот код приводит к сообщению об ошибке:
UnboundLocalError: local variable 'total' referenced before assignment
Это потому, что строка total += number
пытается изменить значение total
, чего нельзя сделать в Python таким образом.