pythboa
Фев. 1, 2009 09:42:17
Можно ли в Питоне подставить из строкового формата часть имени объекта?
>>> import sys
a = ‘version’
sys.a # хотелось чтобы сработало как sys.version,
… а оно ессно ругается, говорит нетути такого атрибута :D
Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?
pythboa
Фев. 1, 2009 09:43:30
И ещё интересно, можно ли при этом обойтись без создания классов.
gmorgunov
Фев. 1, 2009 10:50:53
Можно:
>>> 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
pythboa
Фев. 1, 2009 11:13:31
Стас, я хотел чтобы имя новой переменной бралось из другой переменной
gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
a = “foo = ‘bar’”
exec a
и у нас новая переменная foo
ну и много чего ещё,
спасибо! :)
crchemist
Фев. 1, 2009 12:39:46
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)]'
>>>
crchemist
Фев. 1, 2009 12:41:15
pythboa
Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?
>>> a = 'foo'
>>> locals()[a] = 'bar'
>>> foo
'bar'
>>>
crchemist
Фев. 1, 2009 12:43:41
pythboa
gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
то фігня. так не треба робити. exec наскільки я бачив троха в інших місцях використовується
ofigetitelno
Фев. 1, 2009 13:04:13
:)
Цитата:
locals()
Warning
The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter.
crchemist
Фев. 1, 2009 13:08:34
хм. в мене такого не видає. і взагалі ідея створювати змінні таким чином є поганою. А exec використовується для виконання якогось куска коду в певному контексті - по тих прикладах де я бачив
crchemist
Фев. 1, 2009 13:12:55
можна подивитись як виглядає додавання якигось змінних в globals() в zope.deferredimport.deferredmodule - не знаю наскільки то правильно але воно робоче