tutorial - python教學




通過** kwargs將** kwargs參數傳遞給另一個函數 (3)

我不明白下面的例子,可以說我有這些功能:

# python likes
def save(filename, data, **kwargs):
    fo = openX(filename, "w", **kwargs) # <- #1
    fo.write(data)
    fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
    fo = openX(filename, "w", kwargs) # <- #2
    fo.write(data)
    fo.close()

def openX(filename, mode, **kwargs):
    #doing something fancy and returning a file object

為什麼#1是正確的解決方案,#2是錯誤的解決方案? **kwargs基本上是一個字典,所以如果我想傳遞給openX的參數,我認為正確的方法是沒有** ,只是給字典。 但python顯然不喜歡第二個,並告訴我我給了3而不是2個參數。 那麼這背後的原因是什麼?


**語法告訴Python將關鍵字參數收集到字典中。 save2將其作為非關鍵字參數(字典對象)傳遞。 openX沒有看到任何關鍵字參數,所以**args沒有被使用。 而是獲得第三個非關鍵字參數(字典)。 修復這個改變openX函數的定義。

def openX(filename, mode, kwargs):
    pass

因為字典是單個值。 如果要將它作為一組關鍵字參數傳遞,則需要使用關鍵字擴展。








python