Форум сайта python.su
py.user.nextБоюсь вы их не знаете.
это где это ?
py.user.nextЭто что? Некоторые разработчики принципиально не применяют функции поскольку они работают дольше чем простой перескок в switch. :) А вообще каждый разработчик по своему такую архитектуру обосновывает.
маленькое переключение
Отредактировано doza_and (Фев. 27, 2014 19:53:14)
Офлайн
А где вообще можно почитать о том, у какой структуры данных в питоне какая асимптотическая сложность и т.д.? Немного погуглив я нашел только сравнительные тесты, а хотелось бы что-то вроде шпаргалки, поэтому спешу задать вопрос пока тема не ушла в небытие
Отредактировано dapaci (Фев. 27, 2014 23:22:35)
Офлайн
Офлайн
doza_andприведи пример в виде кода
Если при разработке системы сообщения то добавляются то убавляются, таблица становится слишком неэффективной по памяти поскольку постоянно занимается новое адресное пространство.
doza_andфункции - это элемент декомпозиции программного кода
Некоторые разработчики принципиально не применяют функции поскольку они работают дольше чем простой перескок в switch. :)
doza_andречь идёт про C++, там такого нет
Если вам нужен реально быстрый switch то используйте вычисляемый goto
Отредактировано py.user.next (Фев. 28, 2014 00:01:15)
Офлайн
Singularity
спасибо большое, это оно!
Офлайн
:)
py.user.nextПосмотрите вокруг.
насчёт switch на 100 состояний - это просто какая-то ахинея
py.user.nextПрикрепил. Это часть compile.c из исходных кодов питона 3.4. Там как раз порядка 100 состояний
приведи пример в виде кода
Отредактировано doza_and (Март 4, 2014 07:28:32)
Прикреплённый файлы:
bb.cpp (9,3 KБ)
Офлайн
Офлайн
doza_and
Разве речь шла не о прикладных задачах (и то только в сфере использования Питона), где действительно редко встречается (если вообще бывает) switch на 10+ состояний?
Офлайн
py.user.next
речь идёт про C++
LexanderУчитывая что в питоне его вообще нет, то я бы сказал что он вообще не встречается.
действительно редко встречается switch на 10+ состояний
if i==1: code1 elif i==2: code1 .....
switch i: case 1: code1 case 2: code2 ......
d={1:lambda :code1,1:lambda :code2} ..... d[i]()
Офлайн
doza_andа, если простой switch имеется в виду, то согласен
А вот под с или с++ я довольно часто встречал диспетчеризацию сообщений в виде switch на несколько сотен, а то и тысяч пунктов.
switch (s) {
case S1:
a = 1;
s = S3;
break;
case S2:
a = 1;
s = S4;
break;
case S3:
b = 1;
s = S2;
break;
case S4:
b = 1;
s = S1;
break;
}
switch (s) {
case S1:
a = 1;
s = S2;
break;
case S2:
b = 1;
s = S1;
break;
}
doza_andпотому что это небольшой конечный автомат
Если посмотреть выход bizon+flex то конечный автомат перехода между состояниями парсера тоже часто реализован в виде switch.
Отредактировано py.user.next (Март 4, 2014 22:26:38)
Офлайн