1 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
由于非默認參數(shù)必須始終位于左側(因為非默認參數(shù)不能位于默認參數(shù)之后),因此您可以計算需要多少填充,然后將其添加到默認參數(shù)的前面:
def func(a, b=1, c=2, *args, **kwargs):
pass
spec = getfullargspec(func)
padded_defaults = (None,) * (len(spec.args) - len(spec.defaults)) + spec.defaults
zipped = dict(zip(spec.args, padded_defaults)) # {'a': None, 'b': 1, 'c': 2}
(len(spec.args) - len(spec.defaults))計算需要多少左側填充,然后使用“序列乘法”( (None,) *) 生成該填充。+ spec.defaults然后將填充連接到現(xiàn)有默認值的左側。
在某些極端情況下這可能會中斷;雖然我無法立即想到這樣的情況。由于元組串聯(lián),這也不是很有效,但在 99% 的情況下這可能不是問題。
arg->default 之間似乎沒有存儲在任何地方,因此最好的選擇似乎是根據(jù)每個參數(shù)的數(shù)量推斷哪些參數(shù)具有哪些默認值。
添加回答
舉報