我正在編寫一些代碼,其中一些函數需要很多輸入變量。所以,我認爲通過字典使這些輸入變量可調用kwargs是個好主意。我遇到函數kwargs被父函數調用時遇到問題。作爲一個簡單的例子,請考慮下面的代碼。如何將字典項目用作父函數和子函數中的函數kwargs?
import numpy as np
## generate some data and call function via dict
def f(x):
return np.cos(x)
data_one = np.linspace(1, 10, 10) # x
data_two = f(data_one) # y
xy_dict = dict(x=data_one, y=data_two) ## put x,y into dict
def try_dict_ops(x, y):
c = [x[i] - y[i] for i in range(len(x)) if len(x) == len(y)]
return np.array(c)
print(try_dict_ops(**xy_dict))
## prints array, it works
現在我將介紹一個父函數和相應的數據字典。
abxy_dict = dict(a=1, b=4, x=data_one, y=data_two)
def try_nested_dict_ops(a, b, x, y):
g = [try_dict_ops(x, y)[i] * a + b for i in range(len(x))]
return np.array(g)
print(try_nested_dict_ops(**abxy_dict))
## prints array, it works
我的問題是關於調用父函數的不同方法,該方法依次調用上面定義的子函數。沒有明確將x
和y
置於abxy_dict
之內嗎?此外,如果一個父函數調用兩個不同的子函數(這兩個子函數共享kwargs名稱但不一定是參數值),我的目標是否仍然有可能得到這樣的設置?
非常有用,謝謝!作爲一個快速拋開,功能是否有可能從多個字典中調用kwargs? – mikey
@mikey再次,不要混淆用於調用和定義函數參數的類似語法。從Python 3.5開始,您可以在調用中使用'** name'指定多個字典。所有鍵值組合都傳遞給函數。如果它明確命名了參數和/或全部參數,則取決於函數。 –