2009-12-16 51 views
1

假設我有這樣的函數簽名:調用這樣的函數會被認爲是不好的做法嗎?

def foo(a=True, b=True, c=True, d=True, e=True): 

我已經決定這將是簡潔的方式來調用這個函數,考慮到所有傳入的參數應該是False

foo(*5*[False]) 
foo(*[False]*5) 

但直覺告訴我,將是不好的Python風格。你怎麼看?

回答

9

如果很難閱讀,這是不好的風格。

請記住,代碼被讀取很多比書面更頻繁。

+0

呀,一開始我以爲是不是很難看懂,但後來我又想起。謝謝! – guinaps 2009-12-17 15:33:01

1

您的代碼應該自行解釋並易於閱讀。該Style Guide for Python給出了這樣的例子,這應有助於回答你的問題:

使用'.startswith()和'.endswith() 而不是字符串的切片檢查 前綴或後綴。

startswith()和endswith()是 更清晰並且更不容易出錯。對於

例如:

Yes: if foo.startswith('bar'): 

    No: if foo[:3] == 'bar': 
4

我喜歡下面的80-20規則默認值。如果一個函數有一個參數的默認值,我選擇使用不同的值,我需要做的是明顯,在通話,因爲這是一條重要信息。

如果你真的要「違反」五個默認參數,我會在調用中明確表明,以便讓讀者清楚。即,我會按名稱明確列出每個參數並指出錯誤。

儘管您編寫的代碼應該可以工作,但它會讓人分心,而且有人會專注於弄清楚你到底在做什麼,而不是意識到重要的一點 - 因爲你沒有采取任何行動的默認值。這不是保存(電子)樹木的地方。

相關問題