在Python 中轉送宣告以防止稍後定義的函數出現名稱錯誤
在Python 中,嘗試在定義之前呼叫函數可能會導致在名稱錯誤中。雖然程式碼重組似乎是唯一的解決方案,但還有其他方法。
一種方法是透過將函數的呼叫包裝在單獨的函數中來前向宣告函數。這允許在定義函數之前呼叫該函數,而不會觸發 NameError。
例如,以下程式碼將會失敗:
print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))
因為cmp_configs函數還沒定義。要前向宣告它,我們可以包裝呼叫:
def forward_declare_cmp_configs():
print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))
forward_declare_cmp_configs()
def cmp_configs():
...
現在,可以在定義 cmp_configs() 之前呼叫forward_declare_cmp_configs()函數,並且原始程式碼將執行而不會出錯。
前向宣告有用的另一個場景是遞歸函數。例如,以下程式碼將會失敗:
def spam():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam()
要前向宣告遞歸調用,我們可以使用巢狀函數方法:
def spam_outer():
def spam_inner():
if end_condition():
return end_result()
else:
return eggs()
def eggs():
if end_condition():
return end_result()
else:
return spam_inner()
return spam_inner()
spam_outer()()
請記住,雖然前向宣告很有用,但 Python 中的一般規則是在首次使用之前定義函數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3