Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 6, 2012 05:11:35

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Переменные вместо констант

Нормально ли в модуле, использовать вместо констант переменные? Т.к их в питоне нету….
Например:

BIG_TITS = 4 //Как-бэ константа
class girl(object):
   .....


Если такие переменные используються в в классе, то при многопоточной работе может возникнуть искл. из-за того что два потока обратятся одновременно к этой переменной?
И вообще насколько правильно так писать, или лучше в документации к классу\модулю писать что такая-то цифра\строка означает за это…
Вот например в pycurl сделано так.
Как лучше проверить что в списке есть только определенные обьекты?
Я написал так:
check_tuple = (SOURCES_WEB, SOURCES_IMAGE, 
			SOURCES_VIDEO, SOURCES_NEWS, SOURCES_SPELL)
map(lambda i: if i not in check_tuple: raise SearchError('Invalid sources type'))



Офлайн

#2 Окт. 6, 2012 08:52:03

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Переменные вместо констант

Если в языке нет констант, то что еще остается делать :)

Если потоки только читают значение переменной, то исключений не будет. Если пишут (например меняют значение какого-то счетчика), то доступ к переменной нужно защитить локом.

Заменять числа переменными считается правильным.



Отредактировано Soteric (Окт. 6, 2012 11:34:36)

Офлайн

#3 Окт. 7, 2012 01:00:27

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Переменные вместо констант

mironich
Т.к их в питоне нету….
И это печально…

Офлайн

#4 Окт. 7, 2012 17:39:06

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Переменные вместо констант

odnochlen
И это печально…
Да печально. Наследуем класс от словаря, выкидываем __setattr__ и получаем что-то типа библиотеки констант.

Soteric
то доступ к переменной нужно защитить локом
Что-то мне подсказывает что это зависит от версии интерпретатора. Если вы будете эту переменную менять в виде:
myvar=25

То этот лок получится автоматически из GIL.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version