Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2009 16:09:49

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

Глобальные переменные в питоне

Добрый день.
Подскажите пожалуйста как правильно объявить глобальные переменные чтобы к ним был доступ во всех модулях программы?

Есть один модуль GLOBVAR
В нём хочу объявить несколько глобальных переменных var1, var2 и в других модулях иметь возможность считывать и изменять их.
Т.е. организовать обмен параметров между модулями.
Второй час бъюсь не могу сообразить как это сделать:(

Заранее спасибо всем кто поможет советом:)



Офлайн

#2 Янв. 22, 2009 16:43:07

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Глобальные переменные в питоне

Глобальные переменные - зло.
Тебе нужен простой конфиг-файл. Для этого есть модули типа ConfigParser. Или xml использовать.

Отредактировано (Янв. 22, 2009 16:43:57)

Офлайн

#3 Янв. 22, 2009 17:02:25

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

Глобальные переменные в питоне

Ferroman
Глобальные переменные - зло.
Тебе нужен простой конфиг-файл. Для этого есть модули типа ConfigParser. Или xml использовать.
У меня скрипт будет крутится внутри GPRS-модема. Конфиг-файл или xml не прокатит.
Скрипт состоит из нескольких модулей. Один модуль отвечает за приём параметров настройки работы всего модема. Он должен фиксировать и сохранять изменения в глобальные переменные. Другие модули используют эти переменные для своей работы.
У меня есть мысли сформировать чтото наподобие структуры управления программой, изменять её и возвращать по return. Но всёже проще в нужном месте скрипта изменить пару переменных.
Пробовал объявлять переменные как global. В модуле настроек меняю их значения, перехожу в рабочий модуль - значения остаются неизменными :(
Сам я чайник в питоне. На С объвил-бы глобальную структуру и даже не задумывался-бы о том как правильно менять её параметры.



Офлайн

#4 Янв. 22, 2009 18:34:09

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Глобальные переменные в питоне

mempfis
Модификатор global нужен только для того, чтобы объявлять глобальные переменные внутри функций и классов.
Но переменные, объявленные на уровне модуля

var1 = 12
var2 = 'abc'
var3 = 'cdf'
и так являются глобальными.
Возможно, проблема в том, что импорт осуществлялся так -> from globvar import var1 (from globvar import *).



Офлайн

#5 Янв. 23, 2009 00:01:58

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Глобальные переменные в питоне

Не знаю уж насколько это зло, но я как-то стараюсь обходиться без этого… Но пару раз очень активно использовал изменение __builtins__. В моём конкретном случае, это было очень удобно и решило много проблем.

ZAN
Возможно, проблема в том, что импорт осуществлялся так -> from globvar import var1 (from globvar import *).
Наверняка.
mempfis, делай просто import GLOBVAR as GV, а стучись так: v1 = GV.var1 и GV.var1 = val1



Офлайн

#6 Янв. 30, 2013 08:58:20

GennDALF
От: Екатеринбург
Зарегистрирован: 2013-01-30
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальные переменные в питоне

2ZZZ
А можно поподробнее про изменение builtins?

Такая задачка возникла: есть главный модуль, в котором инициализируется несколько строковых переменных (в глобальной области видимости). Из главного модуля при определенном условии управление передается во второй модуль, а там эти переменные тоже нужны. Но если from main import var1, то начинается повторное выполнение главного модуля, что, конечно, лишнее.

Я для себя сделал вывод, что надо юзать builtins, но вот как - не знаю. У Лутца очень скупо на эту тему: пояснений нет, примеров нет.

Буду признателен за помощь.

Офлайн

#7 Янв. 30, 2013 17:24:29

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Глобальные переменные в питоне

Поднимать пост такой давности... Я вообще случайно заметил.

builtins изменять не надо. Это крайняя мера и нужна только тогда, когда таких вопросов, как ты задал, уже не остаётся. Иначе это просто жесть, а не код получается. И у Лутца, кстати, именно поэтому ничего про это и нет.

Вынеси эти переменные в отдельный модуль и импортируй где душа пожелает. Но вообще, если это не просто какие-нить общие настройки, то передавай эти переменные как параметры функций и/или в init классов. Советую главный исполняемый модуль делать очень маленьним. Типа только импортирование главной функции и её вызов. Всё, больше ничего не надо. Ну разве что конструкция "if name == 'main':".

P.S. По два подчерка съел парсер маркдауна... :-(



Отредактировано ZZZ (Янв. 30, 2013 18:11:26)

Офлайн

#8 Сен. 22, 2016 08:53:37

marataziat
От: Алматы
Зарегистрирован: 2016-05-24
Сообщения: 104
Репутация: +  -5  -
Профиль   Отправить e-mail  

Глобальные переменные в питоне

redis тебе в помощь



Я настоящий тюленялюб :)

Офлайн

#9 Сен. 26, 2016 19:07:15

marataziat
От: Алматы
Зарегистрирован: 2016-05-24
Сообщения: 104
Репутация: +  -5  -
Профиль   Отправить e-mail  

Глобальные переменные в питоне

Глобальные переменные вообще делаются так

global moyaperemennya



Я настоящий тюленялюб :)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version