Вызов против определения глобальных переменных внутри функции Python - PullRequest
0 голосов
/ 26 апреля 2020

Я относительно новичок в Python, поэтому, пожалуйста, прости мое невежество.

У меня есть две функции, действующие на одну переменную var:

var = 8

def func1():
    print(var)

def func2():
    var += 1
    print(var)

func2 не будет работать, если я не определю var как глобальную переменную:

def func2():
    global var
    var += 1
    print(var)

Какая функциональность позволяет мне вызывать глобальные переменные (как в func1), но не позвольте мне переопределить глобальные переменные без явного вызова их сначала (как в func2)?

1 Ответ

0 голосов
/ 26 апреля 2020

FAQ по программированию объясняет причину:

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

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

...