Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 1, 2009 09:42:17

pythboa
От:
Зарегистрирован: 2008-03-17
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

Можно ли в Питоне подставить из строкового формата часть имени объекта?

>>> import sys
a = ‘version’
sys.a # хотелось чтобы сработало как sys.version,

… а оно ессно ругается, говорит нетути такого атрибута :D

Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?



Офлайн

#2 Фев. 1, 2009 09:43:30

pythboa
От:
Зарегистрирован: 2008-03-17
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

И ещё интересно, можно ли при этом обойтись без создания классов.



Отредактировано (Фев. 1, 2009 09:44:34)

Офлайн

#3 Фев. 1, 2009 10:50:53

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

Можно:

>>> 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)

Офлайн

#4 Фев. 1, 2009 11:13:31

pythboa
От:
Зарегистрирован: 2008-03-17
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

Стас, я хотел чтобы имя новой переменной бралось из другой переменной

gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
a = “foo = ‘bar’”
exec a
и у нас новая переменная foo
ну и много чего ещё,
спасибо! :)



Отредактировано (Фев. 1, 2009 11:14:15)

Офлайн

#5 Фев. 1, 2009 12:39:46

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

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)]'
>>>



Офлайн

#6 Фев. 1, 2009 12:41:15

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

pythboa
Или допустим есть переменная a = ‘foo’, как создать из нее переменную foo = bar?
>>> a = 'foo'
>>> locals()[a] = 'bar'
>>> foo
'bar'
>>>



Отредактировано (Фев. 1, 2009 12:41:36)

Офлайн

#7 Фев. 1, 2009 12:43:41

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

pythboa
gmorgunov, дада, это оно! Получается, exec - это такой .bat файл внутри Питона, и можно:
то фігня. так не треба робити. exec наскільки я бачив троха в інших місцях використовується



Офлайн

#8 Фев. 1, 2009 13:04:13

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

:)
Цитата:
locals()
Warning
The contents of this dictionary should not be modified; changes may not affect the values of local variables used by the interpreter.



Офлайн

#9 Фев. 1, 2009 13:08:34

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

хм. в мене такого не видає. і взагалі ідея створювати змінні таким чином є поганою. А exec використовується для виконання якогось куска коду в певному контексті - по тих прикладах де я бачив



Офлайн

#10 Фев. 1, 2009 13:12:55

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Сгенерировать новые переменные

можна подивитись як виглядає додавання якигось змінних в globals() в zope.deferredimport.deferredmodule - не знаю наскільки то правильно але воно робоче



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version