myList
- глобальная переменная. Он существует в контексте foo
, где вы получаете доступ и изменяете один из его элементов.
myList = [0, 5]
def foo():
myList[0] = 6
print('Before foo: {}'.format(myList))
foo()
print('After foo: {}'.format(myList))
Выход
Before foo: [0, 5]
After foo: [6, 5]
Это не работает, однако, если переменная не является списком.
Я предполагаю, что вы пытались что-то похожее на следующее:
a = 0
def bar():
a = 6
print('Before bar: {}'.format(a))
bar()
print('After bar: {}'.format(a))
Выходной
Before bar: 0
After bar: 0
В этом случае не наблюдается каких-либо изменений в глобальной переменная a
, потому что в пределах bar
вы назначаете новый локальный переменный способныйa
, который shadows глобальная переменная с тем же именем. Вы устанавливаете локальную переменную a
- 6, которая не действует, поскольку переменная отбрасывается, как только функция заканчивается.
Вы можете показать, что даже простые целые числа, объявленные в глобальной области, могут быть доступны в пределах области действия, запустив что-то вроде следующего. В этом случае мы указываем, что функция должна изменить существующую глобальную переменную b
, а не назначать новую локальную.
b = 0
def baz():
global b
b = 6
print('Before baz: {}'.format(b))
baz()
print('After baz: {}'.format(b))
Выход
Before baz: 0
After baz: 6
Я подумал, что если вы хотите что-то мутировать в функции вы должны вызвать: глобальный MyList? –
, только когда вы переназначаете новое значение для данного имени. Вы не в этом случае. –
Не когда мутирующие элементы списка list [0] = 4' будут работать, а 'list = [4, 5]' не будут. –