Как присвоить значение из locals () локальной переменной с тем же именем? - PullRequest
0 голосов
/ 03 мая 2018

Это работает:

def foo():
    locals().update({'bar': 12})
    print(locals()['bar'])  # 12

Это не удалось:

def foo():
    locals().update({'bar': 12})
    bar = locals()['bar']  # KeyError: 'bar'
    print(bar)

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Когда вы запускаете этот код:

def foo():
    locals().update({'bar': 12})
    print locals()
    bar = locals()['bar']

Вывод: Первый {} печатается И тогда мы получим KeyError

Итак, я предполагаю, что ваш locals не обновляется, когда вы пытаетесь присвоить значение переменной (bar = locals()['bar']). Но он отлично работает в первом случае, потому что вы не выполняете никаких заданий.

Редактировать 1 : Я просмотрел вашу ссылку на github и предложил бы вам использовать dict вместо locals. Например,

def base_config():
    return dict(num_epochs=50, bath_size=200, gradient_clipping=100.0)
0 голосов
/ 03 мая 2018

изменить имя переменной. я имею в виду:

bar = locals()['bar']  # KeyError: 'bar'

на

tmp = locals()['bar'] # 12
0 голосов
/ 03 мая 2018

https://docs.python.org/3/library/functions.html#locals

Примечание Содержимое этого словаря не должно изменяться; изменения могут не влиять на значения локальных и свободных переменных, используемых интерпретатором.

Редактировать: Но, как уже упоминалось выше, bar = 12, конечно, работает:

>>> def foo():
...     bar = 12
...     bar_ = locals()["bar"]
...     print(bar_)
...     
... 
>>> foo()
12
...