我有一些遞歸回溯代碼,測試如果選擇是有效的,然後再做。將is_legal_choice
函數嵌套在遞歸函數solve
中是不是一個好主意?每次調用solve
函數時,都會重新定義這個內部函數嗎?在遞歸函數裏面定義一個內部函數是一個壞主意?
7
A
回答
5
是的,每次調用函數時都會重新定義內部函數。然而,這並不像你想象的那麼糟糕; Python代碼被解析爲一次代碼對象,並且每次只有函數對象(用作代碼對象的一種包裝)被重新構建。
+0
感謝您的回覆。這是有道理的,並且是信息性的! – rookie
1
是的,它每次被調用時都會被重新定義。但是,這並不總是一個壞主意。這就是你如何進行封閉,這有時是有用的。
如果你的is_legal_choice
函數需要使用一些僅在外部函數範圍內可用的數據,我會說它去。性能開銷不會太大(如果需要,您可以隨時進行配置)。
如果is_legal_choice
不需要任何來自solve
的參數的數據,請做任何使您的代碼最容易理解的數據。
你可以找到與谷歌關閉的更多信息,但這裏有一個例子:http://ynniv.com/blog/2007/08/closures-in-python.html
相關問題
- 1. R在函數裏面定義一個函數屬性
- 2. 一個遞歸函數C++
- 3. 將參數包裹在一個對象的函數中是一個壞主意?
- 4. 遞歸函數裏面Smarty.tpl
- 5. 確定一個遞歸函數
- 6. 定義一個調用其他函數的內聯函數是否有意義?
- 7. 如何在對象內部做一個遞歸減少函數?
- 8. that.setState不是一個函數,一個獨立的函數內部
- 9. 嘗試執行兩個函數遞歸時沒有定義一個函數
- 10. 這個函數的遞歸定義
- 11. 在OCaml中爲遞歸函數定義一個靜態變量
- 12. 遞歸函數得到一個參數
- 13. jQuery UI函數在另一個函數內部是未定義的
- 14. 在條件內定義一個函數
- 15. 在$ out裏面查詢一個函數裏面的內容
- 16. 定義一個函數裏面的一個未定義的全局變量
- 17. 在一個遞歸函數操縱一個全局數組
- 18. (iphone)是一個壞主意?
- 19. 下一個MVC時,在哪裏放置遞歸函數?
- 20. 遞歸調用setTimeout函數並傳遞一個匿名函數
- 21. 不能在jquery裏面定義一個函數? ... undefined
- 22. 是外部函數的一個屬性的內部函數?
- 23. 在我遞歸函數之前結束一個函數
- 24. 是否可以在函數內部放置一個函數?
- 25. Python - 創建一個遞歸函數
- 26. 試圖寫一個Python遞歸函數
- 27. 無法找出一個遞歸函數
- 28. 暫停一個遞歸調用函數
- 29. 遞歸函數返回一個Vec
- 30. 用setTimeout遞歸調用一個函數
功能*對象*將每個函數被調用時重新創建。這聽起來並不壞,代碼對象已經存在並且功能對象創建相對較輕。 –
如果從維護/可讀性角度對您有意義,請不要過多擔心函數對象創建開銷。 –
@MartijnPieters:我會那麼做......謝謝! – rookie