python - 函数可以是 Python 部分中的 kwarg 之一吗?
问题描述
我想用它functools.partial
来减少我的一个函数中的参数数量。这里有一个问题:一个或多个kwargs
可能是函数本身。这就是我的意思:
from functools import partial
def B(alpha, x, y):
return alpha(x)*y
def alpha(x):
return x+1
g = partial(B, alpha=alpha, y=2)
print(g(5))
这会引发错误:
TypeError:B()为参数“alpha”获得了多个值
可以partial
将函数作为提供的参数处理吗?如果没有,是否有解决方法或更通用的方法partial
?
解决方案
partial
它本身不知道应该将给定的位置参数分配给x
仅仅因为您为alpha
. 如果您想alpha
成为特定函数,请将该函数作为位置参数传递给partial
.
>>> g = partial(B, alpha, y=2)
>>> g(5)
12
g
相当于
def g(x):
return alpha(x) * 2 # == (x + 1) * 2
或者,您可以使用您的原始定义g
,但请确保也将5
其作为关键字参数传递,避免任何额外的位置参数。
>>> g = partial(B, alpha=alpha, y=2)
>>> g(x=5)
12
这是有效的,因为在g
和之间partial
,您已经为所有必需的参数提供了关键字参数,从而消除了对任何位置参数的需要。
推荐阅读
- javascript - 如何判断A是否包含B?在 JavaScript 中
- android - 未解决的参考:runOnUiThread Kotlin
- r - 如何将 R 闪亮应用程序的不同 git 分支部署到 shinyapps.io 中的不同目的地?
- ios - UICollectionViewDiffableDataSource:当collection view只有0个section时,请求section 0的item数
- excel - Excel如何从单列搜索结果中抓取整行数据
- angular - Angular:如何访问索引 - 数组中的键值
- io - 有没有办法在不使用该模块中的函数的情况下打印模块类型?
- xamarin.forms - Picker 的 ItemDisplayBinding 的 MultiBinding 在添加新项目时抛出 Null 引用异常
- python - Vscode - .env 文件中的变量扩展
- c# - 在画布前对游戏对象进行排序