Форум сайта python.su
Добрый день.
Подскажите пожалуйста как правильно объявить глобальные переменные чтобы к ним был доступ во всех модулях программы?
Есть один модуль GLOBVAR
В нём хочу объявить несколько глобальных переменных var1, var2 и в других модулях иметь возможность считывать и изменять их.
Т.е. организовать обмен параметров между модулями.
Второй час бъюсь не могу сообразить как это сделать:(
Заранее спасибо всем кто поможет советом:)
Офлайн
Глобальные переменные - зло.
Тебе нужен простой конфиг-файл. Для этого есть модули типа ConfigParser. Или xml использовать.
Отредактировано (Янв. 22, 2009 16:43:57)
Офлайн
FerromanУ меня скрипт будет крутится внутри GPRS-модема. Конфиг-файл или xml не прокатит.
Глобальные переменные - зло.
Тебе нужен простой конфиг-файл. Для этого есть модули типа ConfigParser. Или xml использовать.
Офлайн
mempfis
Модификатор global нужен только для того, чтобы объявлять глобальные переменные внутри функций и классов.
Но переменные, объявленные на уровне модуля
var1 = 12
var2 = 'abc'
var3 = 'cdf'
Офлайн
Не знаю уж насколько это зло, но я как-то стараюсь обходиться без этого… Но пару раз очень активно использовал изменение __builtins__. В моём конкретном случае, это было очень удобно и решило много проблем.
ZANНаверняка.
Возможно, проблема в том, что импорт осуществлялся так -> from globvar import var1 (from globvar import *).
Офлайн
2ZZZ
А можно поподробнее про изменение builtins?
Такая задачка возникла: есть главный модуль, в котором инициализируется несколько строковых переменных (в глобальной области видимости). Из главного модуля при определенном условии управление передается во второй модуль, а там эти переменные тоже нужны. Но если from main import var1, то начинается повторное выполнение главного модуля, что, конечно, лишнее.
Я для себя сделал вывод, что надо юзать builtins, но вот как - не знаю. У Лутца очень скупо на эту тему: пояснений нет, примеров нет.
Буду признателен за помощь.
Офлайн
Поднимать пост такой давности... Я вообще случайно заметил.
builtins изменять не надо. Это крайняя мера и нужна только тогда, когда таких вопросов, как ты задал, уже не остаётся. Иначе это просто жесть, а не код получается. И у Лутца, кстати, именно поэтому ничего про это и нет.
Вынеси эти переменные в отдельный модуль и импортируй где душа пожелает. Но вообще, если это не просто какие-нить общие настройки, то передавай эти переменные как параметры функций и/или в init классов. Советую главный исполняемый модуль делать очень маленьним. Типа только импортирование главной функции и её вызов. Всё, больше ничего не надо. Ну разве что конструкция "if name == 'main':".
P.S. По два подчерка съел парсер маркдауна... :-(
Отредактировано ZZZ (Янв. 30, 2013 18:11:26)
Офлайн
redis тебе в помощь
Офлайн
Глобальные переменные вообще делаются так
global moyaperemennya
Офлайн