簡體   English   中英

如何迭代不同的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

你可以縮短有共同價值觀的呼叫arg1arg2kw1kw2是這樣的:

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM