為什麼在預設參數之後宣告非預設參數是非法的?
在 Python 中,遵循正確的參數順序至關重要定義函數時。非預設參數必須位於任何預設參數之前。這個限制源自於這樣一個事實:必需的參數必須在可選參數(預設參數)之前指定。
SyntaxError: Non-Default Argument Follows Default Argument
出現此錯誤當您在預設參數之後聲明帶有非預設參數的函數時,如下例所示:
<code class="python">def fun1(a="who is you", b="True", x, y): print(a, b, x, y)</code>
意外賦值問題
混合預設和非預設爭論會導致句法歧義。讓我們考慮使用上述函數的函數呼叫:
<code class="python">func1("ok a", "ok b", 1) # Is 1 assigned to x or a? func1(1) # Is 1 assigned to a or x? func1(1, 2) # Which arguments are mapped to which parameters?</code>
在這種情況下解釋器不可能確定正確的賦值。
參考O'Reilly - Core-Python
根據O'Reilly - Core-Python,所有必要的參數都應位於函數定義中的任何預設參數之前。這確保可以使用最少的所需參數集來呼叫該函數。
關鍵字參數呼叫
關鍵字參數允許無序位置參數並且可以跳過如果與預設參數結合使用,則忽略缺少的參數。例如,以下使用關鍵字參數的函數呼叫在語法上是正確的:
<code class="python">def fun1(x, y, a="who is you", b="True"): print(a, b, x, y) # Call with keyword arguments fun1(4, y=5, a="Python is awesome")</code>
結論
為了避免語法錯誤並保持將參數分配給參數的邏輯流程,記住參數在函數定義中的正確位置至關重要。始終在任何可選參數(預設參數)之前聲明必需參數(非預設參數)。
以上是為什麼在 Python 中在預設參數之後聲明非預設參數是非法的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!