Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Константы в питоне


Автор: Karadul 6.2.2010, 14:09
Как делать константы, вроде socket.SOCK_STREAM?

Автор: eshofot 6.2.2010, 23:53
может создать модуль? и потом импортировать его.

Автор: Karadul 7.2.2010, 02:31
Тогда это будут обычные переменные, а как сделать именно константы?

P.S. вбейте в поиск, например, "SOCK_STREAM" в каталоге питона - ни в одном .py файле его не будет.

Автор: spSerg 7.2.2010, 13:10
среди либок есть _socket.pyd. Импортируем ее:
Код

import _socket

копаем внутри, и находим:
Код

>>> dir(_socket)
[... 'SOCK_DGRAM', 'SOCK_RAW', 'SOCK_RDM', 'SOCK_SEQPACKET', 'SOCK_STREAM', ...]
>>> type(_socket.SOCK_STREAM)
<type 'int'>

Скорее всего, это просто напрямую внедренное имя в _socket.__dict__
Либо просто
Код

SOCK_STREAM = 1


Автор: Леопольд 7.2.2010, 13:42
Цитата(Karadul @  7.2.2010,  02:31 Найти цитируемый пост)
Тогда это будут обычные переменные, а как сделать именно константы?

Констант в пайтоне нет.

Автор: Karadul 10.2.2010, 17:32
А как в моем примере?
Упсь, это тоже не константа.

Что, совсем никак?
Питонкапец++? Даже в перле есть (через одно место правда).

Автор: shupg 11.2.2010, 11:09
Цитата

Питонкапец++? Даже в перле есть (через одно место правда). 


Через одно место они везде есть;) Если тебе без разницы как, но константы - есть способы!

Автор: spSerg 11.2.2010, 12:51
А какую именно функциональность константы тебе нужно?
  • Представление числа именем? - так здесь и переменной хватает.
  • Скорость работы со значением без лишних обращений к памяти? - тут вообще не в тему. Потому как такое возможно только в компилируемых языках.
  • Невозможность изменения в коде? - такое можно классом навернуть. Вот только скорость, да и целесообразность такой конструкции сомнительна.


Автор: Karadul 11.2.2010, 13:56
Невозможность изменения в коде без ковыряния в носу через ж и потери скорости.

Цитата(shupg @  11.2.2010,  11:09 Найти цитируемый пост)
Через одно место они везде есть;) Если тебе без разницы как, но константы - есть способы!

Какие? Если без слишком большого гимора.

Автор: Леопольд 11.2.2010, 18:09
Цитата(Karadul @  11.2.2010,  13:56 Найти цитируемый пост)
Какие? Если без слишком большого гимора. 

Копай в сторону декораторов. Не знаю как во втором пайтоне, знаю что в третьем можно сделать декоратор класса. Правде не помню как smile

@Const
class Enum(int): pass

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)