nonlocal
позволяет получить доступ к переменной из ближайшей охватывающей (enclosing) области видимости, которая не является глобальной. То есть, ищет переменную уровнем выше, внутри функции, в которой определена текущая функция.
global
, в свою очередь, позволяет получить доступ к переменной из глобальной области видимости, то есть вне всех функций, на уровне модуля.
Основное различие: nonlocal
для доступа к переменным во вложенных функциях, global
для доступа к переменным на уровне модуля. Использовать nonlocal
можно только внутри вложенной функции.
В Python ключевые слова nonlocal
и global
используются для работы с переменными, находящимися вне текущей области видимости функции. Они служат для изменения или доступа к переменным, расположенным в других областях, и имеют разные цели:
global
Ключевое слово global
используется для доступа к глобальным переменным, объявленным вне текущей функции, то есть в глобальной области видимости модуля. Когда вы объявляете переменную внутри функции с помощью global
, вы сообщаете Python, что намерены использовать и, возможно, изменить глобальную переменную с тем же именем. Без global
, присваивание значения переменной с таким же именем внутри функции создаст новую локальную переменную, а глобальная переменная останется неизменной.
Пример:
x = 10 # Глобальная переменная
def my_function():
global x
x = 20 # Изменяем глобальную переменную x
my_function()
print(x) # Вывод: 20
Без использования global
, внутри функции была бы создана локальная переменная x
, и глобальная переменная осталась бы равной 10.
nonlocal
Ключевое слово nonlocal
используется внутри вложенных функций (функций, определенных внутри других функций) для доступа к переменным из ближайшей внешней (неглобальной) области видимости. То есть, оно позволяет изменять переменные, определенные в родительской функции. nonlocal
не может использоваться для доступа к глобальным переменным или переменным, определенным во встроенной области видимости (например, встроенные функции Python).
Пример:
def outer_function():
x = 10 # Переменная во внешней функции
def inner_function():
nonlocal x
x = 20 # Изменяем переменную x во внешней функции
inner_function()
print(x) # Вывод: 20
outer_function()
Здесь nonlocal x
в inner_function
сообщает Python, что x
относится к переменной x
, определенной в outer_function
. Без nonlocal
, в inner_function
была бы создана новая локальная переменная x
, и значение x
в outer_function
осталось бы равным 10.
global
относится к переменным в глобальной области видимости (вне всех функций, в пространстве имен модуля). nonlocal
относится к переменным в области видимости внешней функции, для вложенных функций.global
используется для доступа к глобальным переменным, а nonlocal
- для доступа к переменным в родительской (неглобальной) области видимости.nonlocal
можно использовать только во вложенных функциях. global
можно использовать в любой функции (если требуется доступ к глобальной переменной).В заключение, global
позволяет изменять глобальные переменные изнутри функции, а nonlocal
позволяет изменять переменные в ближайшей внешней функции, создавая более инкапсулированные изменения состояния.