Если я правильно понял, ваша проблема: я связал имя с каким-то объектом на уровне модуля;Теперь я хочу написать функцию, которая изменяет привязку этого глобального имени к другому объекту, переданному в качестве аргумента функции.
В Python на глобальные имена можно ссылаться внутри функции (при условии, что вы не связываетедругой объект с тем же именем), но для изменения их привязки вы должны сначала объявить эти имена как global
.Причина проста: по умолчанию все имена, связанные внутри функции, имеют область действия функции.
GLOBAL_NAME = 12
ANOTHER_GLOBAL_NAME = 50
def func(value):
global GLOBAL_NAME
GLOBAL_NAME = value
print(GLOBAL_NAME, ANOTHER_GLOBAL_NAME)
При вызове func(33)
, GLOBAL_NAME
будет привязан к объекту 33
.ANOTHER_GLOBAL_NAME
это просто ссылка на глобальное имя;так как это имя не связано внутри функции, Python ищет это имя в глобальной области видимости.
Для получения дополнительной информации о включении области действия Python вы можете обратиться к документации Python по глобальному выражению до PEP-0227 и до PEP-3104 .