Питон, для чего нужен тип Enum?Python

Программы на Python
Ответить
Anonymous
 Питон, для чего нужен тип Enum?

Сообщение Anonymous »

В Python 3.4 в стандартной библиотеке есть библиотека Enum: enum. Мы можем получить бэкпорт для enum, который работает с Python 2.4–2.7 (и даже с 3.1 до 3.3), enum34 в pypi.

Но нам удавалось довольно долго обходиться без этого нового модуля — так почему же он у нас теперь есть?

У меня есть общее представление о назначении перечислений из других языков. В Python обычно используется простой класс следующим образом и ссылается на него как на перечисление:

Код: Выделить всё

class Colors:
blue = 1
green = 2
red = 3
Это можно использовать в API для создания канонического представления значения, например:

Код: Выделить всё

function_of_color(Colors.green)
Если есть какие-либо критические замечания, он изменчив, вы не можете его перебирать (легко), и как мы можем узнать семантику целого числа, 2?

Тогда я полагаю, я мог бы просто использовать что-то вроде именованного кортежа, который был бы неизменяемым?

Код: Выделить всё

>>> Colors = namedtuple('Colors', 'blue green red')
>>> colors = Colors('blue', 'green', 'red')
>>> colors
Colors(blue='blue', green='green', red='red')
>>> list(colors)
['blue', 'green', 'red']
>>> len(colors)
3
>>> colors.blue
'blue'
>>> colors.index(colors.blue)
0
Создание именованного кортежа немного избыточно (нам приходится писать каждое имя дважды) и поэтому несколько неэлегантно. Получение «номера» цвета также немного неэлегантно (нам приходится писать цвета дважды). Проверку значений придется выполнять с помощью строк, что будет немного менее эффективно.

Итак, вернемся к перечислениям.

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

Подробнее здесь: https://stackoverflow.com/questions/376 ... e-good-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»