От документация :
Условные выражения (иногда названный “ternary operator”) имеют самый низкий приоритет всех операций Python.
выражение
x if C else y
сначала оценивает условие, C ( не x ); если C верен, , x оценен, и его значение возвращено; иначе y оценен, и его значение возвращено.См. PEP 308 для получения дополнительной информации об условных выражениях.
Новый начиная с версии 2.5.
Конечные автоматы отлично подходят для высокопроизводительной системы. Если вам действительно нужна очень высокая производительность, использование основы рабочего процесса добавляет много сложностей и накладных расходов. Я обнаружил, что biztalk совершенно не подходит для очень высокой производительности.
В настоящее время Microsoft используют WF в своих серверных продуктах, и они расширяют это. Так, например, механизм WF можно найти в Share Point Server (MOSS) и в BizTalk Server. Оба достаточно хорошо масштабируются и допускают сценарии горизонтального масштабирования, т. Е. Вы добавляете больше (дешевого) оборудования в кластер с балансировкой нагрузки, если вам требуется больше вычислительной мощности.
HTH, Томас
Это не говорит напрямую о производительности, но если вы планируете в конечном итоге перейти на WF 4.0, вы должны знать, что StateMachineActivity, скорее всего , не поможет .
Если вы ищете высокопроизводительную машину высокой производительности .NET, я бы рекомендовал . Вот выдержка с сайта проекта:
поддерживаются большинство стандартных состояний конструкций:
также предусмотрены некоторые полезные расширения:
Конфигурация следующая:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
И приятная вещь заключается в том, что поскольку он реализует универсальные, вы можете использовать INT или строку для представления состояний и триггеров, позволяя вам очень легко интегрироваться с вашей базой данных или ORM. Красота состоит в том, что нет дополнительного хоста выполнения, о котором вы должны беспокоиться, просто загрузите состояние State с текущим состоянием с объекта или записи, и вы хотите пойти.