揭示函數參數排序中的語法錯誤
為什麼以下Python程式碼會遇到語法錯誤?
def fun1(a="who is you", b="True", x, y): print a,b,x,y
錯誤的原因是函數簽章中非預設參數(x 和 y)必須位於預設參數(a 和 b)之前。必需參數必須出現在具有預設值的可選參數之前。
混合模式的危險
允許非預設參數跟隨預設參數會為解釋器帶來歧義來決定哪些值對應於哪些參數。考慮以下場景:
def fun1(a, b, x="who is you", y="True"): ...
假設我們使用以下參數呼叫此函數:
fun1(1, "ok") # 1 assigned to x, "ok" assigned to a or b?
如果沒有排序規則,就不可能明確地為參數賦值。
函數參數的正確語法
要正確定義函數,預設參數必須永遠位於非預設參數之後。範例函數的正確語法是:
def fun1(x, y, a="who is you", b="True"): ...
此語法確保解釋器可以以確定性方式為參數賦值,即使存在關鍵字參數和缺少參數也是如此。
關鍵字參數救援
關鍵字參數可讓您透過明確指定參數名稱來覆寫預設值。這對於跳過缺失的參數特別有用。例如,考慮以下對fun1 的呼叫:
fun1(x=1, b="False") # Override default value of b
結論
預設參數後面的非預設參數的限制確保了對函數呼叫的清晰和明確的解釋,防止由於參數分配不正確而導致的語法錯誤和運行時錯誤。
以上是為什麼 Python 函數定義中非預設參數必須位於預設參數之前?的詳細內容。更多資訊請關注PHP中文網其他相關文章!