Форум сайта python.su
Можно ли в Питоне подставить из строкового формата часть имени объекта?
>>> import sys
a = ‘version’
sys.a # хотелось чтобы сработало как sys.version,
… а оно ессно ругается, говорит нетути такого атрибута :D
Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?
Офлайн
И ещё интересно, можно ли при этом обойтись без создания классов.
Отредактировано (Фев. 1, 2009 09:44:34)
Офлайн
Можно:
>>> cmd = 'import sys; print sys.version'
>>> exec cmd
2.5.1 (r251:54863, Sep 22 2007, 01:43:31)
[GCC 4.2.1 (SUSE Linux)]
>>> a='version'
>>> exec 'import sys; print sys.' + a
Отредактировано (Фев. 1, 2009 11:05:41)
Офлайн
Стас, я хотел чтобы имя новой переменной бралось из другой переменной
gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
a = “foo = ‘bar’”
exec a
и у нас новая переменная foo
ну и много чего ещё,
спасибо! :)
Отредактировано (Фев. 1, 2009 11:14:15)
Офлайн
pythboa
Можно ли в Питоне подставить из строкового формата часть имени объекта?
>>> import sys
a = ‘version’
sys.a # хотелось чтобы сработало как sys.version,
>>> import sys
>>> a = 'version'
>>> getattr(sys, a)
'2.6 (r26:66714, Jan 23 2009, 00:48:55) \n[GCC 4.3.0 20080428 (Red Hat 4.3.0-8)]'
>>>
Офлайн
pythboa
Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?
>>> a = 'foo'
>>> locals()[a] = 'bar'
>>> foo
'bar'
>>>
Отредактировано (Фев. 1, 2009 12:41:36)
Офлайн
pythboaто фігня. так не треба робити. exec наскільки я бачив троха в інших місцях використовується
gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
Офлайн
:)
Цитата:
locals()
Warning
The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter.
Офлайн
хм. в мене такого не видає. і взагалі ідея створювати змінні таким чином є поганою. А exec використовується для виконання якогось куска коду в певному контексті - по тих прикладах де я бачив
Офлайн
можна подивитись як виглядає додавання якигось змінних в globals() в zope.deferredimport.deferredmodule - не знаю наскільки то правильно але воно робоче
Офлайн