Почему присвоение моим глобальным переменным не работает в Python?

Уловка для понимания этого global-variables заключается в том, что, когда pythonista вы присваиваете переменной, используя pythonic =, вы также объявляете ее scope как локальную переменную. Поэтому python-shell вместо изменения значения variable-scope глобальной переменной a setA python-interpreter (value) фактически устанавливает global-variables локальную переменную (которая pythonista называется a) на переданное global-variable значение.

Это станет более python очевидным, если вы попытаетесь py напечатать значение a в начале global-variable setA (value) следующим образом:

def setA(value):
    print "Before assignment, a is %d" % (a)
    a = value
    print "Inside setA, a is now %d" % (a)

Если pythonista вы попытаетесь запустить pythonic этот Python, вы получите python-interpreter полезную ошибку:

Traceback (most recent call last):
  File "scopeTest.py", line 14, in 
    setA(42)
  File "scopeTest.py", line 7, in setA
    print "Before assignment, a is %d" % (a)
UnboundLocalError: local variable 'a' referenced before assignment

Это говорит scope нам о том, что Python решил, что scope функция setA (value) имеет variable-scope локальную переменную с именем scope a, которую вы изменяете, когда python-interpreter назначаете ей в функции. Если variable-scope вы не присваиваете a в функции py (как в printA()), тогда Python global-variable использует глобальную переменную variable-scope A.

Чтобы пометить переменную py как глобальную, вам нужно python-shell использовать ключевое слово python-shell global в Python в области, в которой вы хотите использовать глобальную переменную. В данном python-interpreter случае это функция setA (значение). Итак, сценарий python-shell выглядит следующим образом:

a = 7

def printA():
    print "Value of a is %d" % (a)

def setA(value):
    global a
    a = value
    print "Inside setA, a is now %d" %(a)


print "Before setA"
printA()
setA(42)
print "After setA"
printA()

Это python-interpreter добавление одной строки сообщает python Python, что, когда вы используете python-shell переменную a в функции setA python (значение), вы говорите о pythonista глобальной переменной, а py не о локальной переменной.

python

global-variables

scope

2022-11-18T02:16:00+00:00
Вопросы с похожей тематикой, как у вопроса:

Почему присвоение моим глобальным переменным не работает в Python?