Существует ли способ извлечь dict в Python в локальное пространство имен? [дубликат]

6
задан Kevin 23 February 2010 в 08:45
поделиться

3 ответа

Так как небезопасно изменять команду, возвращаемую функцией locals ()

>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=%r"%i for i in d.items())
>>> a
6
>>> b
'hello'
>>> c
set([])

, но использовать такой метод exec некрасиво. Вам следует изменить дизайн, чтобы вам не нужно было динамически добавлять в ваше локальное пространство имен

Изменить: См. Оговорки Майка по поводу использования repr в комментариях.

>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=d['%s']"%(k,k) for k in d)
>>> id(d['c'])
3079176684L
>>> id(c)
3079176684L
5
ответ дан 16 December 2019 в 21:38
поделиться

Попытка:

    locals().update(my_dict)

EDIT:

gnibbler сделал очень верное замечание, что локали не должны быть изменены (проверьте: http://docs.python.org/library/functions.html#locals). Тем не менее, в документации Python не говорится, что это небезопасно, там только говорится, что изменения локалей не могут повлиять на значения переменных. Прежде чем ответить на вопрос, я попробовал в своем Python 2.6 IDLE, что обновление локалей действительно работает, как в глобальной области видимости, так и внутри функции. Поэтому я не удаляю свой ответ, а вместо этого добавляю предупреждение, что это может работать при определенных (специфических для платформы?) обстоятельствах, но это не гарантировано.

4
ответ дан 16 December 2019 в 21:38
поделиться

Изменение locals () dict могло бы быть решением, но документы говорят, http://docs.python.org/library/functions.html #

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

Итак, вопрос в том, зачем вам это вообще нужно? могут быть лучшие способы добиться того, чего вы пытаетесь достичь.

Также почему вы не можете напрямую обращаться к dict или назначать их переменным?

-1
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: