Проблема глобальной переменной Python - PullRequest
1 голос
/ 13 января 2011

У меня проблемы с использованием глобальных переменных в python ...

В моей программе я объявил 2 глобальные переменные, глобальный SYNC_DATA и глобальный SYNC_TOTAL_SIZE

Теперь в одной из моих функций я могу использовать глобальную переменную SYNC_DATA, не объявляя ее снова глобальной как функцию; однако я не могу использовать другую глобальную переменную SYNC_TOTAL_SIZE таким же образом. Я должен объявить последний как глобальный в функции снова, чтобы использовать его. Я получаю эту ошибку, если использую ее, не объявляя ее как глобальную в функции - «UnboundLocalError: локальная переменная 'SYNC_TOTAL_SIZE', на которую ссылаются перед назначением»

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

Ответы [ 2 ]

6 голосов
/ 13 января 2011

Предполагается, что SYNC_TOTAL_SIZE не объявлено как локальная переменная.Это зависит от того, какие операции вы выполняете с глобальными переменными, для простого чтения глобальной переменной нет необходимости объявлять ее как глобальную, но если вы изменяете значение глобальной переменной, вы должны объявить ее с помощью global.

0 голосов
/ 13 января 2011

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

Совет всегда должен говорить global, когда вы это имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...