Python 如何迭代不同的Kwarg?

Python 如何迭代不同的Kwarg?,python,keyword-argument,Python,Keyword Argument,我觉得这个问题以前一定有人问过,但我没能找到,如果是这样的话,很抱歉 我有一个具有不同参数的函数,如: def f(arg1, arg2, ...,argN, kw1=0, kw2=0, kw3=0): # some code ... 假设我定义了(强制)参数: arg1 = some_value_1 arg2 = some_value_2 ... argN = some_value_N 我想压缩一些重复的函数调用,比如 f(arg1, arg2, ... argN, kw1=1)

我觉得这个问题以前一定有人问过,但我没能找到,如果是这样的话,很抱歉

我有一个具有不同参数的函数,如:

def f(arg1, arg2, ...,argN, kw1=0, kw2=0, kw3=0):
    # some code ...
假设我定义了(强制)参数:

arg1 = some_value_1
arg2 = some_value_2
...
argN = some_value_N
我想压缩一些重复的函数调用,比如

f(arg1, arg2, ... argN, kw1=1)
f(arg1, arg2, ... argN, kw1=23)
f(arg1, arg2, ... argN, kw2=456)
f(arg1, arg2, ... argN, kw2=789)
f(arg1, arg2, ... argN, kw3='a')
f(arg1, arg2, ... argN, kw3='b')
...
看起来像是:

for kw_def in [kw1=1, kw1=23, kw2=456, kw2=789, kw3='a', kw3='b',...]:
    f(arg1, arg2, ... argN, kw_def)
但是语法上是正确的。正确的python方法是什么?

使用字典:

for kw_def in [
    {'kw1': 1},
    {'kw1': 23},
    {'kw2': 456},
]:
    f(arg1, ..., argN, **kw_def)
使用

假设您有一个具有此签名的函数:

def f(arg1, arg2, arg3, kw1, kw2, kw3):
    pass
您可以将具有通用值的调用缩短为
arg1
arg2
kw1
kw2
,如下所示:

from functools import partial
f_short = partial(f, 1, 2, kw1="A", kw2="B")
f_short(3, kw3="C")
调用
f_short
相当于下面的直接调用:

f(1, 2, 3, kw1="A", kw2="B", kw3="C")