Глобальное поведение ключевых слов в python внутри блока - PullRequest
0 голосов
/ 27 апреля 2018

Дело 1

x = 0
def set_x(n):
    global x
    if n%2==0:
        x=n
    else:
        x = -1

set_x(10)
print(x)

Ожидаемый результат: 10 Фактический объем производства: 10

Этот вывод очень ожидаемый, и именно так ведет себя ключевое слово global.

Дело 2

x = 0
def set_x(n):
    if n%2==0:
        global x
        x=n
    else:
        x = -1

set_x(10)
print(x)

Ожидаемый результат: 0 Фактический объем производства: 10

Если мое понимание global верно, то как ключевое слово global для global x в блоке if влияет на локальное ключевое слово x в блоке else. Я считаю, что это два разных блока.

Есть ли объяснение этому поведению.

1 Ответ

0 голосов
/ 27 апреля 2018
  1. Оператор global является объявлением, которое выполняется для всего текущего блока кода.

    if не вводит новый кодовый блок .

    A block - это фрагмент текста программы Python, который выполняется как единое целое. Ниже приведены блоки: модуль, тело функции и определение класса.

  2. global - это директива для парсера.

    if оценивается во время выполнения, но синтаксический анализатор получает global. Парсер не заботится и не может оценивать if операторов.

Выдержки из https://docs.python.org/3/reference/simple_stmts.html#the-global-statement и https://docs.python.org/3/reference/executionmodel.html.

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

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