簡體   English   中英

關鍵字和非關鍵字參數的順序

[英]Order of Keyword and Non-Keyword Arguments

我有以下代碼:

def say_hello_then_call_f(f, *args, **kwargs):
    print 'args is', args
    print 'kwargs is', kwargs
    print("Hello! Now I'm going to call %s" % f)
    return f(*args, **kwargs)     # when calling a function, however, * unpacks a tuple and ** unpacks a dict

def g(x, y,s, z=1):
    return (x + y) / z

我不明白為什么下面的行會導致錯誤“在關鍵字arg之后出現非關鍵字arg”。 即使傳遞值時,函數是否必須具有關鍵字參數,然后才具有非關鍵字參數?:

say_hello_then_call_f(g, 1, y=2,4, z=5.)

謝謝

是的,Python對參數強制執行一個順序:所有非關鍵字參數都必須排在最前面,然后是任何關鍵字參數。

icktoofay是正確的,但我認為對此進行更深入的介紹可能會有用。 這樣做的原因是,如果您允許先使用關鍵字參數,然后再使用位置參數,則對於該參數實際應進入的位置固有地變得模糊。 是否應該計算關鍵字參數?

在您的示例中:

say_hello_then_call_f(g, 1, y=2, 4, z=5.)

對於44th3rd位置自變量,都存在一些情況。 如果將關鍵字參數視為位置參數,則沒有理由指定與該參數關聯的單詞;如果不指定該單詞,則該函數具有有效的非恆定接口。

另外,很難說它當時是*args還是**kwargs

最重要的是,如果我們將參數的含糊性與python的鴨子輸入法相結合,將很快導致一些令人難以調試的問題。

暫無
暫無

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

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