如何迭代不同的 kwargs?
how to iterate over different kwargs?
我觉得这个问题以前肯定有人问过,但我没有找到,如果是这样的话,抱歉!
我有一个带有不同参数的函数,例如:
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)
但语法正确。正确的 pythonic 方法是什么?
使用词典:
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")
我觉得这个问题以前肯定有人问过,但我没有找到,如果是这样的话,抱歉!
我有一个带有不同参数的函数,例如:
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)
但语法正确。正确的 pythonic 方法是什么?
使用词典:
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")