как это изменить.
==================

очтения документации я понимаю, что в Python есть отдельное пространство имен для функций, и если я хочу использовать глобальную переменную в этой функции, мне нужно использовать`global`.

Я использую Python 2.7, и я попробовал этот маленький тест

Кажется, все работает нормально, даже без`global`, Я смог получить доступ к глобальной переменной без каких-либо проблем.

Я что-то пропустил? Кроме того, следующее из документации по Python:

Имена, перечисленные в глобальном операторе, не должны быть определены как формальные параметры или как цель управления циклом for, определение класса, определение функции или оператор импорта.

В то время как формальные параметры и определение класса имеют смысл для меня, я не могу понять ограничение для цели управления цикла и определения функции.

Ключевое слово`global` полезно только для изменения или создания глобальных переменных в локальном контексте, хотя создание глобальных переменных редко считается хорошим решением.

Вышеуказанное даст вам:

Хотя, если вы используете`global` Скажем, переменная станет доступной «вне» области действия функции, фактически превратившись в глобальную переменную.

Таким образом, приведенный выше код даст вам:

Кроме того, из-за природы Python, вы также можете использовать`global` объявлять функции, классы или другие объекты в локальном контексте. Хотя я бы посоветовал против этого, так как это вызывает кошмары, если что-то идет не так или требуется отладка.



 которую нужно знать об именах в Python, это то, что они являются локальными или глобальными для каждой области действия.

Рассмотрим это, например:

Вы можете догадаться, что`value = 0` оператор будет присваивать локальной переменной и не повлияет на значение той же переменной, объявленной вне`doit()` функция. Вы можете быть более удивлены, обнаружив, чтокод выше не будет работать. Заявление`print value` внутри функции производит`UnboundLocalError.`

Причина в том, что Python заметил, что в другом месте функции вы назначаете имя`value`, а также`value` нигде не заявлено`global`, Это делает его локальной переменной. Но когда вы пытаетесь распечатать его, локальное имя еще не определено. Python в этом случаене отступает искать имя как глобальную переменную, как это делают некоторые другие языки. По сути, вы не можете получить доступ к глобальной переменной, если вы определили локальную переменную с тем же именемв любом месте в функции.



[переплет](https://docs.python.org/reference/executionmodel.html) это в рамках.

Если вы просто ищете переменную, чтобы прочитать ее значение, у вас есть доступ к глобальной и локальной области видимости.

Однако, если вы назначите переменной, имя которой не входит в локальную область, выпереплет это имя в этой области (и если это имя также существует как глобальное, вы будете скрывать это).

Если вы хотите иметь возможность присваивать глобальное имя, вам нужно указать парсеру использовать глобальное имя, а не связывать новое локальное имя - это то, что делает ключевое слово «global».

Привязка в любом месте блока приводит к тому, что имя в этом блоке становится связанным, что может привести к некоторым довольно странным последствиям (например, UnboundLocalError, внезапно появляющаяся в ранее работающем коде).



 получаете доступ к имени.

Если вы присваиваете переменную внутри функции, эта переменная считается локальной, если вы не объявили ее глобальной. В отсутствие этого он считается глобальным.



Я приведу простой пример: подумайте об этом коде:

как вы можете видеть, последняя строка кода вернет 0, потому что внутри функции**MYVAR** переменная не была переназначена, она только что была изменена, и она изменится**только когда функция вызывается без влияния на основную переменную myVar, потому что она определена внутри функции our (означает, что это локальная переменная)**, но с использованием глобального ключевого слова как такового:

мы фактически заказываем python, что эта переменная внутри def не является локальной, используем глобальную переменную с именем as**MYVAR** как это изменить.



Хотя вы можете получить доступ к глобальным переменным без`global` ключевое слово, если вы хотите изменить их, вы должны использовать`global` ключевое слово. Например:

В вашем случае вы просто получаете доступ к списку`sub`.



Это означает, что вы не должны делать следующее:



Глобал делает переменную "Глобал"

Это заставляет 'x' действовать как обычная переменная вне функции. Если вы вынули глобальную переменную, она выдаст ошибку, так как не может распечатать переменную внутри функции.



 что любая переменная, объявленная вне функции, является глобальной, и только если вы объявляете их изнутри функций (кроме конструкторов), вы должны указать, что эта переменная будет глобальной.



Вы можете получить доступ к глобальным ключевым словам без ключевого слова`global`Чтобы иметь возможность их изменять, вам необходимо явно указать, что ключевое слово является глобальным. В противном случае ключевое слово будет объявлено в локальной области.Пример: