Вы также можете сделать
result = ([ a for a,b in original ], [ b for a,b in original ])
Он должен масштабироваться лучше. Особенно, если Python делает все возможное, чтобы не расширять списки, если это не нужно.
(Кстати, это делает 2-кортежи (пары) списков, а не список кортежей, например zip
).
Если генераторы вместо фактических списков в порядке, это будет делать следующее:
result = (( a for a,b in original ), ( b for a,b in original ))
Генераторы не пробиваются по списку, пока вы не спросите об каждом элементе, но на с другой стороны, они сохраняют ссылки на исходный список.
Я почти уверен, что это уже было описано здесь, но я не мог найти существующий вопрос. Итак, вот моя точка зрения на вопрос:
Это в основном то, что вы найдете в Hibernate: Criteria vs. HQL .
Но есть одно существенное различие между API-интерфейсом JPA 2.0 Criteria и API-интерфейсом Hibernate's Criteria, о котором стоит упомянуть: API-интерфейс API JPA 2.0 - это API-интерфейс typeafe и, таким образом, дает время компиляции проверки, завершения кода, лучшей поддержки рефакторинга и т. д. Однако I не обнаруживают, что преимущества перевешивают простоту использования JPQL.
Подводя итог, я бы предпочел JPQL, за исключением динамических запросов (например, для функций поиска с несколькими критериями).
Я ответил на аналогичный вопрос ранее, и я снова отправлю свой ответ здесь для пользы сообщества. Я предполагаю, что вы используете сервер приложений по сравнению с моим ответом ниже.
API критериев существует, чтобы разрешить построение динамических SQL-запросов безопасным типом, который предотвращает SQL инъекции. В противном случае вы бы объединили строки SQL вместе, что связано как с ошибкой, так и с угрозой безопасности: например, SQL Injection. Это будет единственный раз, когда вы захотите использовать API критериев.
Если запрос остается в основном таким же, но нужно принимать только разные параметры, вам следует использовать аннотированные @NamedQueries, которые проще, предварительно скомпилированные, могут быть кэшированы внутри вторичного кеша и, возможно, проверяется при запуске сервера.
Это основное правило, касающееся запросов к критериям и @NamedQueries. По моему опыту редко вам нужен API критериев, но хорошо, что он существует для тех редких времен, в которых это требуется.
Надеюсь, что это поможет.
Я думаю, вы также можете рассмотреть некоторые другие новые рамки, такие как:
это дает вам безопасный и умный способ создания запросов, не является стандартным, но я уверен, что следующий стандарт будет основан по одной из этих технологий.
, если вы хотите, оставайтесь на стандартах, игнорируете это.
bye
JPQL
избегать как можно больше. Не говоря о том, что использовать JPQL - это плохая практика, но я просто говорю, что если что-то можно сделать с использованием критериев, то это должно быть сделано с использованием JPQL. Я просто смиренно ищу больше разъяснений от вас, ставя под сомнение ваше предпочтение JPQL по критериям. – Shahzeb 2 March 2012 в 01:07