我收到了一个关于网络应用中陈旧参数的电话。我看到这篇帖子......
wtforms+flask today's date as a default value
......这就是现场。
该字段的默认设置是在Web服务器启动时设置的。这很容易测试。文件中的几个打印语句已被证实。
现在高级软件工程师的问题是"我如何传递参数?"。
那么......
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()])
...但不立即调用它。基本上,存储函数对象及其参数而不执行它们仍然会推迟,以便代码在页面加载而不是在服务器启动时运行。
目前,我们有两个想法。
最好的方法是什么?我认为这是一种很好的方式,不是我刚才描述的两种方式中的任何一种,我们还不知道。
答案 0 :(得分:2)
您正在描述现有功能 - functools.partial
:
from functools import partial
fromdate = fields.DateField('From Date', default=partial(myfunc, offset=-10), validators=[validators.required()])
答案 1 :(得分:1)
你可以通过前缀lambda:
轻松创建一个没有参数的callable,即:
fromdate = fields.DateField('From Date', default=lambda: myfunc(-10), validators=[validators.required()])
答案 2 :(得分:1)
听起来你可以使用functools.partial:
>>> from functools import partial
>>> fromdate = fields.DateField('From Date', default=partial(myfunc, 10), validators=[validators.required()])
更多信息:https://docs.python.org/2/library/functools.html#functools.partial