LINUX.ORG.RU

Гуд, это полезное дело.

hippi90 ★★★★★
()

Здорово что уж говорить.

saibogo ★★★★
()
Ответ на: комментарий от encyrtid

Ну а, собственно, нужен ли он там? Это при компиляции есть разница между enum и просто переменной.

Ttt ☆☆☆☆☆
()
Ответ на: комментарий от Begemoth

Ну это специфично для сабжевого питоновского enum. А тут возмущаются, что его там не было, хотя во многих других языках (C, например) он есть. Ну вот я и задаю вопрос, какие преимущества у c-шного enum перед тем, как обходятся без enum в Python, учитывая отличия языка Python от C (динамическая типизация, интерпретация вместо компиляции)?

Ttt ☆☆☆☆☆
()
Ответ на: комментарий от Ttt

Преимущества сабжевого енума перед портянкой переменных: свой неймспейс, уход от семантики чисел (Color.red + Color.blue будет не 3, а type error).

PolarFox ★★★★★
()

Python-Version: 3.4

нда, чую совсем скоро обилие подобных ништяков сподвигнут меня уйти с 2.7

fang90 ★★★★★
()

Минорная новость. Я уже десяток enum навелосипедил для разных нужд...

true_admin ★★★★★
()

Отличная новостЬ! Хотя можно было и без этого обходиться.

flareguner
()

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

splinter ★★★★★
()
Последнее исправление: splinter (всего исправлений: 1)

Читать документ лень. Там просто стандартный модуль одобрили или есть что-то, что требует поддержки от интерпретатора? Или есть реализация модулем для старых версий + специальные оптимизации для рантайма?

snizovtsev ★★★★★
()

фигня какая-то, лучше бы из будущего C++ Concepts срисовали.

olegsov
()
Ответ на: комментарий от nullb0t

Было бы хорошо. Недавно ознакомился с вариантом в erlang'e, очень понравилось. Ещё бы в coffeescript добавили.

AlexKiriukha ★★★★
()
Ответ на: комментарий от Sadler

Хорошо хоть не
from if import If

from import import from

frob ★★★★★
()
Ответ на: комментарий от Ttt

Еще итерация поддерживается:

Enumerations support iteration, in definition order:

>>> class Shake(Enum):
...   vanilla = 7
...   chocolate = 4
...   cookies = 9
...   mint = 3
...
>>> for shake in Shake:
...   print(shake)
...
Shake.vanilla
Shake.chocolate
Shake.cookies
Shake.mint
Virtuos86 ★★★★★
()
Ответ на: комментарий от atrus

К элементам кортежа не обратиться по имени, только по индексу.

Ну и что? Это влияет на что нибудь, кроме красоты кода?

firestarter ★★★☆
()
Ответ на: комментарий от firestarter

Это влияет на что нибудь, кроме красоты кода?

Ну, привет! Я бы понял ещё, если бы вы сказали это про словари, мол, пишите [«name»] и не меняйте значения. Но индексы вместо имён - просто взять и впустить в код magic numbers. Дальше будет совет писать спагетти-код?

Или вы предложите на каждый индекс определить константу? Которых в python нет. И которые можно прикрутить сбоку каким-нибудь подобным методом и... Эй, минутку! :)))

atrus ★★★★★
()
Ответ на: комментарий от atrus

Но индексы вместо имён - просто взять и впустить в код magic numbers

Ага. А потом сиди и разбирайся что такое, например, const[36].

drull ★☆☆☆
()

А зачем оно в скриптовом языке нужно? Еще скажите, что ощутимо влияет на скорость работы.

Siado ★★★★★
()

Тред не читал, но считаю своим долгом сказать «В этом вашем питоне что, даже Enum небыло?»

Alve ★★★★★
()
Ответ на: комментарий от atrus
In [1]: from collections import namedtuple

In [2]: namedtuple?
Type:       function
String Form:<function namedtuple at 0x7f70f9d44ed8>
File:       /usr/lib/python2.7/collections.py
Definition: namedtuple(typename, field_names, verbose=False, rename=False)
Docstring:
Returns a new subclass of tuple with named fields.

>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.__doc__                   # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22)             # instantiate with positional args or keywords
>>> p[0] + p[1]                     # indexable like a plain tuple
33
>>> x, y = p                        # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y                       # fields also accessable by name
33
>>> d = p._asdict()                 # convert to a dictionary
>>> d['x']
11
>>> Point(**d)                      # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)
kernelpanic ★★★★★
()

Это просто революция в области ЯП

mutronix ★★★★
()
Ответ на: комментарий от atrus

это уже ушло от темы но вообще-то для этого есть 2 варианта

from collections import namedtuple

и еще вариант, который я использую постоянно - просто создается некий класс, его экземпляр и уже в него записываются поля-аттрибуты с нужными именами.

например

class rec:
    pass

a = rec()
a.pole1 = 100
a.pole2 = 200
и т.д.

у меня сейчас класс не пустой - есть несколько методов для упрощения создания, присваивания и т.д. в частности, вышенаписанное можно написать как a = rec(pole1=100, pole2=200).

Этот метод хорош для динамической типизации (ибо не надо заранее определять что будет содержать «структура», а также объекты являются mutable в отличие от тупля) но плох тем, что каждый такой объект занимает больше места, чем тупль (т.к. словарь за собой тащит), поэтому если надо хранить большой массив элементов то лучше использовать вариант namedtuple - там на каждый экземпляр памяти надо столько же сколько и на простой тупль.

Но вообще везде где мне бы пришлось запоминать номера позиций в тупле вместо имени поля, использую этот метод. Например, если вдруг функция возвращает более одного параметра - проще использовать «rec».

olegsov
()
Последнее исправление: olegsov (всего исправлений: 2)
Ответ на: комментарий от Alve

Тред не читал, но считаю своим долгом сказать «В этом вашем питоне что, даже Enum небыло?»

Ты не поверишь, там пока даже скобок (braces) нет! Если тольоко не сделать

from __future__ import braces
auto12884839
()
Ответ на: комментарий от kernelpanic

Ну, я, собственно, на это и намекал. Что ещё чуть-чуть и Enum будет «изобретён» средствами языка. Только с чуть менее удобной инициализацией.

atrus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.