python - 如何传递与函数的位置参数同名的kwargs?
问题描述
我正在尝试从 SK-learn 调用包装器,将其传递**kwargs
给内部函数。不幸的是,它的位置参数之一与我要在**kwargs
. 我不知道如何正确地通过它们。
例子:
# This is a stand-in for a library function. I can't modify its behaviour.
def outer_function(fn, a, **kwargs):
# do something entirely unrelated with a
fn(**kwargs)
def expects_parameter_a(a):
print(a)
def expects_parameter_b(b):
print(b)
outer_function(expects_parameter_b, a=10, b=20) # this works as expected.
> 20
outer_function(expects_parameter_a, a=10, a=20) # this doesn't work.
outer_function(expects_parameter_a, a=10, kwargs={"a": 20}) # this doesn't work.
outer_function(expects_parameter_a, a=10, **{"a": 20}) # this doesn't work.
解决方案
不要将这些参数设为“第一级”参数;相反,接受您要传递给的参数的字典fn
:
def outer_function(fn, a, fn_kwargs):
# do something entirely unrelated with a
fn(**fn_kwargs)
outer_function(expects_parameter_a, a=10, fn_kwargs={"a": 20})
这实际上可以简化并概括为:
from functools import partial
def outer_function(fn, a):
...
fn()
outer_function(partial(expects_parameter_a, a=20))
# or:
outer_function(lambda: expects_parameter_a(a=20))
换句话说,根本不用outer_function
担心传递参数,只需传入一个已经绑定了所有必要参数的可调用对象。
推荐阅读
- amazon-kinesis - 如何从 aws kinesis 流式传输实时数据以响应基于前端
- c - 在 C 中使用结构时的内存分配
- spring - 如果 kafka 关闭,弹簧执行器“健康”指标不会响应
- postgresql - 读取时带时区的 PostgreSQL 时间戳应用偏移量
- rx-swift - 处理时如何调用方法
- ios - 自定义字体可以在 Storyboard 中使用吗?
- android - 检测Android上安装的GameGuardian/防止GameGuard修改值
- java - Cucumber - Java8 - 使用 @Before 和 lambda 表达式
- css - 如何解决为什么 Bootstrap 4 的sticky-top 类在我的页面上不起作用?
- java - 如何调整 JVM 8 G1 参数以避免 Full GC(分配失败)