我知道the problem以及如何解決它。我想請求幫助在現有的代碼中找到這個問題。Python:捕捉可變默認參數
換句話說,我試圖找到這個陷阱被埋沒的所有位置,所以我可以修復它。
有什麼工具可以幫助我嗎?
我知道the problem以及如何解決它。我想請求幫助在現有的代碼中找到這個問題。Python:捕捉可變默認參數
換句話說,我試圖找到這個陷阱被埋沒的所有位置,所以我可以修復它。
有什麼工具可以幫助我嗎?
grep有什麼問題?
grep "^\s*def.*=(\[\]|\{\}|set\(\))"
這會找到幾乎所有常見的罪魁禍首。
如果您將自己的某個可變類的實例用作默認值,則必須單獨檢查。
如果函數定義被分成多行,該怎麼辦?在我有限的經驗中,我從來沒有得到正則表達式來正確搜索內部代碼。 – max 2010-11-18 19:44:02
@max:多少個函數定義跨越多行?你的代碼庫有多大?這是一次性的練習。如果它需要使用grep來查找在一行上不完整的函數定義,那沒關係。你永遠不會再做這個工作。 – 2010-11-18 20:41:40
@max我知道這是舊的,但要找到(罕見的)多線變種,這應該工作.. pcregrep應與大多數口味的Linux,雖然不在OSX上,我不知道Windows的可用性: '找。 -name「* py」| xargs pcregrep -M'def。+?\([^)] + [\ [{[]'' – slinkp 2013-10-09 19:25:44
任何有經驗的人都不會使用列表或字典作爲默認參數。你做一次。八個小時,很多眼淚後來你想出來,永遠不會再做;) – 2010-11-18 03:08:24
「我試圖找到所有這個陷阱被埋沒的地點」?誰埋了它?找到犯了這個錯誤的程序員並向他們解釋問題。他們爲什麼不能學習和修復他們的代碼? – 2010-11-18 12:25:31
@ S.Lott:同意並編輯標題。在我瞭解這個問題之前,它是我自己的代碼。 – max 2010-11-18 19:37:46