Мне позвонили по поводу устаревших параметров в веб-приложении. Я видел этот пост...
wtforms+flask сегодняшняя дата в качестве значения по умолчанию
... что было на высоте.
Значение поля по умолчанию устанавливалось при запуске веб-сервера. Это было легко проверить. Пара операторов печати в файле, и это было доказано.
Итак, теперь вопрос старшего инженера-программиста: «Как передать параметры?».
Итак, тогда...
myfunc(offset=3):
.... some code
fromdate = fields.DateField('From Date', default=myfunc, validators=[validators.required()])
Но старший инженер-программист хотел бы иметь возможность встраивать аргументы в функцию во время ее назначения, например...
fromdate = fields.DateField('From Date', default=myfunc(-10), validators=[validators.required()])
... но не вызывая его немедленно. По сути, сохранение объекта функции и его аргументов без их выполнения, по-прежнему откладывая, чтобы код выполнялся при загрузке страницы, а не при запуске сервера.
На данный момент у нас есть две идеи.
- Старший инженер-программист рассматривает возможность обернуть метод вокруг метода. Итак, есть один основной метод, а затем куча других, зависящих от сценария, таких как myfuncminus10.
- Я думаю о лямбда-выражениях. Что-то вроде myfunc = lambda :datetime.now().date() - timedelta(days=365) Это определенно даст ожидаемый результат, но может привести к большому количеству копирования и вставки одного и того же кода.
Как лучше всего подойти к этому? Я полагаю, что есть довольно хороший способ, который не является ни одним из двух способов, которые я только что описал, и мы просто еще не знаем его.
functools.partial
. я свой удалю. - person AKS   schedule 29.04.2016