Python - 将命名参数传递给函数对象
Python - Pass named arguments to function object
我接到一个关于网络应用中参数过时的电话。我看到这个 post...
wtforms+flask today's date as a default value
...这是正确的。
该字段的默认设置是在网络服务器启动时设置的。这很容易测试。文件中的几个打印语句已被证明。
所以现在高级软件工程师的问题是"how do I pass parameters in?"。
那么...
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)
它肯定会产生预期的结果,但可能会导致大量复制和粘贴相同的代码。
处理此问题的最佳方法是什么?我想有一个很好的方法,它不是我刚才描述的两种方法中的任何一种,我们只是还不知道。
您只需在 lambda:
前面添加即可轻松创建不带参数的可调用对象,即:
fromdate = fields.DateField('From Date', default=lambda: myfunc(-10), validators=[validators.required()])
听起来你可以使用 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
您描述的是现有功能 - functools.partial
:
from functools import partial
fromdate = fields.DateField('From Date', default=partial(myfunc, offset=-10), validators=[validators.required()])
我接到一个关于网络应用中参数过时的电话。我看到这个 post...
wtforms+flask today's date as a default value
...这是正确的。
该字段的默认设置是在网络服务器启动时设置的。这很容易测试。文件中的几个打印语句已被证明。
所以现在高级软件工程师的问题是"how do I pass parameters in?"。
那么...
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) 它肯定会产生预期的结果,但可能会导致大量复制和粘贴相同的代码。
处理此问题的最佳方法是什么?我想有一个很好的方法,它不是我刚才描述的两种方法中的任何一种,我们只是还不知道。
您只需在 lambda:
前面添加即可轻松创建不带参数的可调用对象,即:
fromdate = fields.DateField('From Date', default=lambda: myfunc(-10), validators=[validators.required()])
听起来你可以使用 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
您描述的是现有功能 - functools.partial
:
from functools import partial
fromdate = fields.DateField('From Date', default=partial(myfunc, offset=-10), validators=[validators.required()])