我接到一个关于网络应用程序中过时参数的电话。我看到了这个帖子...
......这是正确的。
该字段的默认设置是在 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) 这样的东西肯定会产生预期的结果,但可能会导致大量复制和粘贴相同的代码。
解决这个问题的最佳方法是什么?我认为有一种非常好的方法,它不是我刚刚描述的两种方法中的任何一种,我们只是还不知道。