我收到一个关于Web应用程序中陈旧参数的调用。我看到这个帖子...Python - 将命名参数传递给函数对象
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()])
。 ..但没有立即调用它。基本上,存储函数对象和它的参数而不执行它们,仍然推迟,以便代码在页面加载而不是在服务器启动时运行。
目前,我们有两个想法。
- 该高级软件工程师正在考虑围绕该方法打包一个方法。所以然后有一个核心方法,然后是一些其他情景特定的,如myfuncminus10
- 我在想lambda表达式。像 myfunc = lambda:datetime.now()。date() - timedelta(days = 365) 它肯定会产生预期的结果,但它可能会导致大量复制和粘贴相同的代码。
解决此问题的最佳方法是什么?我认为有一种很好的方式,不是我刚刚描述的两种方式之一,我们现在还不知道。
在1分钟之内回答'functools.partial'。我会删除我的。 – AKS
另请参阅:[部分应用](https://en.wikipedia.org/wiki/Partial_application)和[Currying](https://en.wikipedia.org/wiki/Currying) –