Python - Почему необходимо объявить нелокальные и глобальные переменные? - PullRequest
0 голосов
/ 18 января 2019

Почему следующий фрагмент кода в простом модуле Python 3.x считается неверным синтаксисом? Меня интересуют конструктивные соображения, которыми руководствовалось решение о необходимости явного объявления глобальных и нелокальных переменных перед присваиванием.

def foo():
    global a = 1

Ответы [ 2 ]

0 голосов
/ 09 марта 2019
Ключевое слово

global указывает, что переменную следует искать в глобальном пространстве имен, как в globals(). Это не что иное, как const объявление в c++. Поэтому, прежде чем обращаться к global a = 1, переменная a должна была быть создана.

def foo():
    global a

Это прекрасно работает без SyntaxError. Но поскольку a не определен перед функцией foo, интерпретатор вернет NameError при вызове foo().

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

0 голосов
/ 18 января 2019

С https://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value:

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

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

Я советую вам прочитать https://docs.python.org/3/reference/simple_stmts.html#the-global-statement и поэкспериментировать с языком. Наконец, вы можете задать основной разработчик языка в одном из списков рассылки здесь: https://www.python.org/community/lists/. Если вы найдете что-нибудь интересное, поделитесь этим с сообществом.

...