Чтобы получить записи из За последние 24 часа вы можете использовать:
from datetime import datetime, timedelta
Entry.objects.filter(pub_date__gte = datetime.now() - timedelta(days=1))
# '
- это сокращение для функции
, которая возвращает указатель на функцию (вместо ее применения). лямбда
возвращает функцию, и обычно требуется указатель на эту функцию. Так как это очень распространено, существует также макрос (в пространстве переменных), который делает это за вас, который также называется лямбда
. Обе строки кода идентичны.
Что лучше, сводится к спору о Lisp-1 / Lisp-2 : в Common Lisp вы можете делать то и другое благодаря макросу. Как всегда, будьте последовательны.
Он отличается в разных диалектах Лиспа. Далее используется Common Lisp:
First # '- это сокращенное обозначение для (function ...) . Таким образом, следующие отличаются только текстуально, но Common Lisp читает их как одно и то же:
#'(lambda (x) (* x 2))
и
(function (lambda (x) (* x 2)))
# 'является макросом чтения и преобразуется, когда код Lisp читается системой Lisp.
Если Lisp вычисляет
(function (lambda (x) (* x 2)))
] Lisp-система создает объект функции, и FUNCTION возвращает его как свое значение .
Итак, когда вам нужна функция как значение, вам нужно записать ее вот так. Функция как значение необходима, когда вы хотите передать ее другим функциям в качестве аргумента, когда вы хотите вернуть ее из функции или когда вы хотите сохранить ее в переменной. Примеры:
(map #'(lambda (x) (* x 2)) '(1 2 3))
(defun (y) #'(lambda (x) (* x y)))
(defparameter *twice-fn* #'(lambda (x) (* x 2)))
Что такое (лямбда (x) (* x 2))?
Это две разные вещи в зависимости от контекста.
Лямбда-выражение
Лямбда-выражение может использоваться вместо имени функции:
(function foo) and (function (lambda (x) (* x 2)))
и
(foo 17) and ((lambda (x) (* x 2)) 17)
Выше два являются допустимым синтаксисом Common Lisp. Там можно напрямую использовать лямбда-выражение.
Обратите внимание, что следующие две формы недопустимы в Common Lisp:
(#'(lambda (x) (* x 2)) 17) ; illegal in Common Lisp
(function #'(lambda (x) (* x 2))) ; illegal in Common Lisp
Macro
В процессе стандартизации Common Lisp был добавлен макрос LAMBDA ( это не было частью первого описания CLtL1 Common Lisp). Это позволяет писать немного более короткий код. Пример:
(lambda (x) (* x 2))
В приведенном выше случае LAMBDA - это макрос. Во время расширения макроса он будет расширен до:
(function (lambda (x) (* x 2)))
Помните, что в приведенной выше форме FUNCTION внутренняя лямбда является частью лямбда-выражения, обозначает функцию и не будет расширяться.
Итак, теперь три примера сверху могут можно записать как:
(map (lambda (x) (* x 2)) '(1 2 3))
(defun (y) (lambda (x) (* x y)))
(defparameter *twice-fn* (lambda (x) (* x 2)))
Это немного короче, выглядит немного менее загроможденным и немного более похожим на код схемы. Это просто выглядит немного лучше для программистов, привыкших читать и писать код схемы.
Резюме
a) (function (lambda (x) (* x 2))) - это «истинный» способ написать код, который возвращает функцию как значение.
b) # '(lambda (x) (* x 2)) - это более короткое обозначение вышеупомянутого
c) (lambda (x) (* x 2)) еще короче , но использует макрорасширение для создания формы a).