Что делает следующий JavaScript?
var groups = countrylist.split(',');
for( var i = -1, group; group = groupsCounty[++i]; ){
...
}
With i starting at -1
increase i by 1
get the ith element from the groupsCounty array
if there is no such element: stop
otherwise: assign it to group and carry on (with whatever "…" is)
Это оптимизированная версия:
for (var i = 0; i < groupsCounty.length; i++; ){
var group = groupsCounty[i];
…
}
With i starting at -1
increase i by 1
get the ith element from the groupsCounty array
if there is no such element: stop
otherwise: assign it to group and carry on (with whatever "…" is)
Это оптимизированная версия:
for (var i = 0; i < groupsCounty.length; i++; ){
var group = groupsCounty[i];
…
}
-121--3612620- Если вы не уверены, что элементы в item _ list
уже существуют в вашей базе данных, и вам нужны объекты модели, то get _ or _ create
- это определенно путь.
Если вы знаете, что предметы НЕ находятся в вашей БД, вам было бы намного лучше сделать:
for item in item_list:
new = Entry.objects.create(
field1 = item.field1,
field2 = item.field2,
)
И если вам не нужны объекты, то просто проигнорируйте возврат от вызова функции. Это не ускорит работу базы данных, но это поможет с управлением памятью, если это проблема.
Если вы не уверены, что данные уже находятся в БД, но в любом поле установлен флаг unique = True
, тогда БД будет обеспечивать уникальность, и вы можете просто поймать исключение и двигаться дальше. Это предотвратит дополнительное попадание в БД, избегая попытки выбора существующего объекта.
from django.db import IntegrityError
for item in item_list:
try:
new = Entry.objects.create(
field1 = item.field1,
field2 = item.field2,
)
except IntegrityError:
continue
В любом случае можно увеличить скорость, управляя транзакциями вручную. Джанго будет автоматически создавать и совершать транзакцию для каждого сохранения, но предоставляет некоторые декораторы, которые значительно повысят эффективность, если вы знаете, что вы будете делать много БД экономит в конкретной функции. Документы Django лучше объясняют все это, чем я могу здесь, но вы, вероятно, хотите обратить особое внимание на django.db.transaction.commit _ на _ успех
-121--2563295-Это эквивалентно
for (var group in groupsCounty) {
...
}
С добавленной стоимостью доступа к индексу ( i
Он делает это: -
var groups = countrylist.split(',');
for( var i = 0; i < groups.length; i++ )
{
var group = groups[i]
...
}
Единственная реальная разница в том, что вышеупомянутое встречается гораздо чаще и его легче распознать. Вы бы не разместили приведенный выше код с вопросом «Что это делает?».
Опубликованный вами код является примером умной разработки, но не обязательно хорошей практики кодирования.
Цикл for
проходит по массиву groups
, пока groupsCounty[++i]
не вернет ложное значение.
С использованием следующих терминов:
for (<initial-expression>; <condition>; <final-expression>)
Выражение initial-expression var i = -1, group
объявляет переменные i
и group
. Для каждой итерации циклическое условие group = groupsCounty[++i]
присваивает следующее значение массива group
. Если это выражение ложно (например, groupsCounty[++i]
возвращает undefined при выходе за границы), цикл останавливается. А final-expression пустое, так как i
уже увеличено в выражении contition.
Это итерация по элементам групп с использованием наличия значения в группе как условия guard. т.е. использование JavaScript Truthiness для контроля количества итераций цикла, потому что guard будет false, когда нет значения, которое может быть присвоено.