Подтвердить что ты не робот

Изменение глобальной переменной с тем же именем, что и локальная переменная

Предположим, что у меня есть глобальная переменная a. И в определении функции мы также имеем локальную переменную с именем a. Есть ли способ присвоить значение глобальной переменной переменной глобальной переменной?

a = 'foo'

def my_func(a = 'bar'):
    # how to set global a to value of the local a?
4b9b3361

Ответ 1

Используйте встроенную функцию globals().

globals()

Вернуть словарь, представляющий текущую глобальную таблицу символов. Это всегда словарь текущего модуля (внутри функции или метода это модуль, в котором он определен, а не модуль, из которого он вызывается).

a = 'foo'

def my_func(a = 'bar'):
    globals()['a'] = a

Кстати, стоит упомянуть, что глобальный является только "глобальным" в рамках модуля.

Ответ 2

Пусть python знает, что вы хотите глобальную версию;

def my_func():
    global a
    a = 'bar'

Ответ 3

>>> a = 'foo'
>>> def my_func(a='bar'):
...     return globals()['a']
...
>>> my_func()
'foo'

Ответ 4

Не путайте глобальные и локальные пространства имен для начала. Всегда старайтесь использовать локальную переменную и глобальную, когда это возможно. Если вы должны делиться переменными между областями, вы все равно можете передавать переменные без необходимости глобального заполнителя. Локальные переменные также ссылаются на гораздо более эффективный доступ, чем на глобальные.

Несколько ссылок:

Обмен переменными в Python

Переменная производительность