首頁  >  文章  >  後端開發  >  為什麼在 Python 中在預設參數之後聲明非預設參數是非法的?

為什麼在 Python 中在預設參數之後聲明非預設參數是非法的?

Patricia Arquette
Patricia Arquette原創
2024-11-01 18:09:30846瀏覽

Why is it Illegal to Declare Non-Default Arguments After Default Arguments in Python?

為什麼在預設參數之後宣告非預設參數是非法的?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn