一、Python的function不支持把default argument放在non-default前面的原因
在 Python 中,函數的參數可以設置默認值,這使得函數調用時可以省略某些參數。但是,Python 不允許將默認參數放在非默認參數之前的原因與默認參數的實現方式有關。
在 Python 中,函數的參數都是通過名稱來傳遞的,即關鍵字參數。當函數有多個參數時,Python 解釋器無法確定每個關鍵字參數所對應的值到底是哪個參數的值。因此,Python 只允許將默認參數放在參數列表的最后面。
如果 Python 允許將默認參數放在參數列表的中間或前面,那么在調用該函數時就會出現歧義。例如,假設我們有一個函數 foo,它有三個參數,其中第二個參數有默認值:
def foo(a, b=10, c):
pass
在調用 foo 函數時,如果只指定了名列前茅個參數 a 和第三個參數 c 的值,那么 Python 解釋器無法確定這兩個值分別對應哪個參數。因此,Python 不支持將默認參數放在非默認參數之前。
為了避免這種歧義,如果需要將默認參數放在參數列表的中間或前面,可以使用關鍵字參數來明確指定參數的值,例如:
def foo(a, c, b=10):passfoo(a=1, c=2) # 等價于 foo(1, 2, 10)
在這個例子中,我們將默認參數 b 放在了參數列表的最后面,但是在調用函數時我們可以使用關鍵字參數來指定參數的值,從而避免了歧義。