python - 函数可以是 Python 部分中的 kwargs 之一吗?

标签 python functional-programming partial

我想使用 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() got multiple values for argument '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

这是有效的,因为在 gpartial 之间,您已经为所有必需参数提供了关键字参数,从而消除了对任何位置参数的需要。

关于python - 函数可以是 Python 部分中的 kwargs 之一吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60739920/

相关文章:

Python:从后台子进程获取标准输出

python - 为什么我会收到 NameError : name 'train_test_split' is not defined?

elasticsearch - 仅针对某些文档存在的按构面的弹性计数

javascript - Rails 在 JS 中添加动态嵌套表单部分和本地

ruby - Rails 5 渲染部分并传递数据

python:如何删除空行?

python - Caffe 中的 net.params[layer].diff 中到底存储了什么?

list - Scala中List数据结构的基本实现

functional-programming - 功能 block 图是函数式编程吗?

java - map 上的流过滤器和分组列表