亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從/使用函數參數作為鍵和默認值作為值創建字典

從/使用函數參數作為鍵和默認值作為值創建字典

白衣染霜花 2023-12-12 21:22:17
我想從函數中獲取一個字典,該字典將函數參數作為鍵,將默認值作為值。我曾經inspect.getfullargspec()獲取參數列表和默認值列表。然后我嘗試使用dict(zip())這些列表創建字典。這有效,但前提是每個參數都有默認值。如果沒有默認值,一切都會變得混亂(正如預期的那樣)。例如,如果參數沒有默認值,我該如何添加 aNone作為值。或者還有其他想法嗎?這是代碼:def fn(name, age=18):    passspec = getfullargspec(fn)args = spec.argsdefaults = spec.defaultszipped = dict(zip(args, defaults))
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

由于非默認參數必須始終位于左側(因為非默認參數不能位于默認參數之后),因此您可以計算需要多少填充,然后將其添加到默認參數的前面:


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然后將填充連接到現有默認值的左側。


在某些極端情況下這可能會中斷;雖然我無法立即想到這樣的情況。由于元組串聯,這也不是很有效,但在 99% 的情況下這可能不是問題。


arg->default 之間似乎沒有存儲在任何地方,因此最好的選擇似乎是根據每個參數的數量推斷哪些參數具有哪些默認值。


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號