Я бы использовал метод Array.sort. http://jsfiddle.net/LJWrg/
var divArr = $("div[id*=pi_div]");
function cleanId(id) {
return parseInt(id.replace("pi_div",""),10);
}
Array.prototype.sort.call(divArr,function(a,b) {
return cleanId(a.id) > cleanId(b.id);
});
divArr.each(function(){
console.log(this.id);
});
jQuery действительно использует этот метод, определяемый внутри, поэтому вы можете сократить его до этого (однако он использует недокументированные методы) http://jsfiddle.net/LJWrg/1/ :
var divArr = $("div[id*=pi_div]");
function cleanId(id) {
return parseInt(id.replace("pi_div",""),10);
}
divArr.sort(function(a,b) {
return cleanId(a.id) > cleanId(b.id);
});
divArr.each(function(){
console.log(this.id);
});
Попробуйте компилятор ShedSkin Python к C++, но это совсем не прекрасно. Также существует Psyco - Python JIT, если только ускорение необходимо. Но по моему скромному мнению это не стоит усилия. Поскольку критические по отношению к скорости части лучшего решения кода должны были бы записать им как расширения C/C++.
Ответ "да, Это возможно". Вы могли взять код Python и попытку скомпилировать его в эквивалентный код C с помощью API CPython. На самом деле раньше был проект Python2C, который сделал просто, что, но я не услышал об этом за многие годы (назад в дни Python 1.5, когда я в последний раз видел его.)
Вы могли попытаться перевести код Python в собственный компонент C как можно больше и отступить к API CPython при необходимости в фактических функциях Python. Я играл с той идеей сам в прошлом месяце или два. Это - однако, очень большая работа, и огромную сумму функций Python очень трудно перевести в C: вложенные функции, генераторы, что-либо кроме простых классов с простыми методами, что-либо модуль изменения вовлечения globals снаружи модуля, и т.д., и т.д.
Psyco является своего рода своевременным (JIT) компилятором: динамический компилятор для Python, выполнения кодируют в 2-100 раз быстрее, но требуется много памяти.
Короче говоря: это запускает Ваше существующее программное обеспечение Python намного быстрее без изменения в Вашем источнике, но это не компилирует в объектный код тем же путем, компилятор C был бы.
Jython имеет компилятор, предназначающийся для байт-кода JVM. Байт-код является полностью динамичным, точно так же, как сам язык Python!Очень здорово. (Да, поскольку ответ Greg Hewgill ссылается, байт-код действительно использует время выполнения Jython, и таким образом, файл банки Jython должен быть распределен с Вашим приложением.)
Пирекс является подмножеством языка Python, который компилирует в C, сделанный парнем, который сначала создал понимания списка для Python. Это было главным образом разработано для создания оберток, но может использоваться в более общем контексте. Cython является более активно сохраняемым ветвлением пирекса.
PyPy является проектом повторно реализовать Python в Python, с помощью компиляции для собственного кода как одна из стратегий реализации (другие, являющиеся VM с JIT, с помощью JVM, и т.д.). Их скомпилированные версии C, выполненные медленнее, чем CPython в среднем, но намного быстрее для некоторых программ.
Shedskin является экспериментальным компилятором Python к C++.
Пирекс является языком, особенно разработанным для записи модулей расширения Python. Это разработано для устранения разрыва между хорошим, высокоуровневым, простым в использовании миром Python и грязным, миром низкого уровня C.
Это могло бы казаться разумным на первый взгляд, однако существует много обычных вещей в Python, которые не являются непосредственно отображаемыми к к представлению C, не перенося большую поддержку во время выполнения Python. Например, утиный ввод приходит на ум. Много функций в Python, которые читают вход, могут взять файл или подобный файлу объект, пока он поддерживает определенные операции, например, читайте () или readline (). Если бы Вы думаете о том, что это взяло бы для отображения этого типа поддержки C, Вы начинаете воображать точно виды вещей, которые уже делает система времени выполнения Python.
существуют утилиты такой как py2exe, который свяжет программу Python и время выполнения в единственный исполняемый файл (в максимально возможной степени).
Как @Greg Hewgill говорит это, существуют серьезные основания, почему это не всегда возможно. Однако определенные виды кода (как очень алгоритмический код) могут быть превращены в "реальный" машинный код.
существует несколько опций:
После этого, можно использовать один из существующих пакетов (замораживание, Py2exe, PyInstaller) для помещения всего в один двоичный файл.
, В целом: нет никакого общего ответа для Вашего вопроса. Если у Вас есть код Python, который является критическим по отношению к производительности, попытайтесь использовать как можно больше встроенной функциональности (или спросить, "Как я заставляю свой Python кодировать быстрее" вопрос). Если это не помогает, попытайтесь определить код и портировать его на C (или Cython) и использовать расширение.